python中groupby可以按照条件计算分组吗,Python:按条件和分组

您可以将^{}与聚合sum聚合并通过^{}进行整形,最后用^{}替换缺失类别的nan:df = df.groupby(['name','condition'], sort=False)['data1'].sum().unstack()

df['total'] = df['a'].fillna(df['b'])

print (df)

condition a b total

name

one 7.0 3.0 7.0

two NaN 48.0 48.0

three 39.0 13.0 39.0

对于新的DataFrame:

^{pr2}$

另一个使用apply的解决方案:def f(x):

if (x['condition'] == 'a').any():

return x.loc[x['condition'] == 'a', 'data1'].sum()

else:

return x.loc[x['condition'] == 'b', 'data1'].sum()

df1 = df.groupby('name', sort=False).apply(f).reset_index(name='total')

print (df1)

name total

0 one 7

1 two 48

2 three 39

更好的方法是创建一个用于聚集过滤数据帧的序列,然后^{},但是这个解决方案忽略了没有a或{}条件的所有name组:a = df.loc[df['condition'] == 'a'].groupby('name', sort=False)['data1'].sum()

b = df.loc[df['condition'] == 'b'].groupby('name', sort=False)['data1'].sum()

df = a.combine_first(b).reset_index(name='total')

print (df)

name total

0 one 7.0

1 three 39.0

2 two 48.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值