我有一个数据框:
id parentid score body
1 10 10 abc
2 10 0 xyz
3 10 1 efg
4 23 3 afd
5 23 2 asfagr
6 34 1 wrqqw
我需要对groupby(parentid)进行分组,然后按均值汇总得分,然后加入正文。 id字段无关紧要,可以将其更改为min或max。
结果应为
id parentid score body
1 10 3 abc xyz efg
4 23 2 afd asfagr
6 34 1 wrqqw
我尝试过
def f(x):
x['Id'] = x['Id']
x['ParentId'] = x['ParentId']
x['Score'] = x['Score'].min() #change to max/ min/ mean to get different results!
x['Body']= " ".join(x['Body'])
return x
temp = temp.groupby("ParentId").apply(f)
temp = temp.reset_index()
它给出corerct结果,但是一旦数据集大小> 1.8 gb ,系统将变得无响应。 我也在Google colab中尝试过,它已崩溃3次。
请提出一个更快的方法,例如lambda函数或其他任何方法。
答案 0 :(得分:2)
尝试将groupby与agg和字典一起使用,以定义每列的汇总:
df.groupby('parentid', as_index=False)[['score', 'body']]\
.agg({'score':'mean', 'body':' '.join})
输出:
parentid score body
0 10 3.666667 abc xyz efg
1 23 2.500000 afd asfagr
2 34 1.000000 wrqqw
答案 1 :(得分:0)
尝试
Select * where DepartmentID="5" and DATE="2020-03-22"