python 分组输出,python:按条件和分组

本文探讨了如何使用Python进行数据聚合,包括groupby+sum操作,并展示了unstack、fillna和apply方法处理丢失类别的方式。通过实例演示,比较了不同方法在处理数据时的优劣,适合数据清洗和分析场景。
摘要由CSDN通过智能技术生成

你可以聚合

groupby

含集料

sum

并按

unstack

,最后一个为丢失的类别替换nan

a

通过

fillna

:

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

:

df1 = df.reset_index().rename_axis(None, 1)[['name','total']]

print (df1)

name total

0 one 7.0

1 two 48.0

2 three 39.0

另一个解决方案

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

更好的方法是创建用于聚合筛选的数据帧的序列,然后

combine_first

,但这个解决方案忽略了所有

name

不带的S组

b

条件:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值