[英]Group sum and count with two unique columns in Python
我有一个数据集,我想在其中对两列进行分组,求和并计算这些值的数量。
数据
source ex pw role date
aa 10 hello q222
aa 10 hello q222
bb 15 ok q422
bb 5 no q422
bb 1 sure q422
bb 4 yes q422
想要的
source ex pw count date
aa 20 2 q222
bb 25 4 q422
正在做
#df.groupby(['source','date'])['pw'].agg(['count','sum'])
df.groupby(['ex','date'])['pw'].agg(['count','sum'])
但是,有了这个,我现在必须执行串联以合并两个输出。 任何建议表示赞赏
使用groupby()
和dropna=False
+ rename()
:
out=(df.groupby(['source','ex','date'],dropna=False)['pw'].agg(['count','sum'])
.reset_index().rename(columns={'sum':'pw'}))
或者
groupby()
与dropna=False
和具有命名元组的聚合:
out=(df.groupby(['source','ex'],dropna=False)
.agg(pw=('pw','sum'),count=('pw','count'),date=('date','first'))
.reset_index())
output out
:
source ex date count pw
0 aa NaN q222 2 20
1 NaN bb q422 4 25
尝试使用groupby
和fillna
创建的新密钥
out = df.groupby([df.source.fillna(df.ex),df.date]).agg({'source':'first',
'ex':'first',
'pw':'sum',
'role':'count',
'date':'first'}).reset_index(drop=True)
Out[489]:
source ex pw role date
0 aa None 20 2 q222
1 None bb 25 4 q422
尝试:
>>> df.fillna('').groupby(['source','ex','date']).agg({'pw': [sum, 'count']})
pw
sum count
source ex date
bb q422 25 4
aa q222 20 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.