大熊猫在分组依据

时间:2020-09-28 19:14:17

标签: python pandas dataframe

我有一个数据框:

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函数或其他任何方法。

2 个答案:

答案 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"