此数据框:
df = pd.DataFrame({'delivery_date' : ['2018-09-07' ,'2018-09-07','2018-09-08','2018-09-09','2018-09-10'],
'user' : ['user1','user1','user2','user3','user3'],
'number_of_papers' : [3,4,3,2,4]})
我想按delivery_date
和user
进行分组。其中:
count
在一天之内交付某物的次数user
。sum
中的number_of_papers
我使用了.agg
,但由于count
和sum
属于不同的列,因此我认为它在这里不适用。
df.groupby(['delivery_date','user'])['delivery_date'].agg(['count','sum']).sort_index(level=[0,1], ascending=[False,True]).reset_index(name ='Counts')
错误TypeError:此dtype不允许归约运算'sum'
总和应为number_of_papers
。我不知道在groupby中写什么。
示例:
除sum
部分外,此操作全部完成:
a.groupby(['delivery_date','user'])['delivery_date'].count().sort_index(level=[0,1], ascending=[False,True]).reset_index(name ='counts')
给予:
delivery_date user counts
0 2018-09-10 user3 1
1 2018-09-09 user3 1
2 2018-09-08 user2 1
3 2018-09-07 user1 2
我只是想同时在此表中将sum
的{{1}}作为一个名为number_of_papers
的新列。
答案 0 :(得分:2)
在agg
函数中使用字典进行与列有关的特定计算,然后对列rename
和reset_index
进行相关计算:
df.groupby(['delivery_date','user']).agg({'delivery_date':'count','number_of_papers':'sum'}).\
sort_index(level=[0,1], ascending=[False,True]).\
rename(columns={'delivery_date':'count','number_of_papers':'sum'}).\
reset_index()
delivery_date user count sum
0 2018-09-10 user3 1 4
1 2018-09-09 user3 1 2
2 2018-09-08 user2 1 3
3 2018-09-07 user1 2 7
答案 1 :(得分:1)