Pandas中groupby分组后如何应用条件筛选与计算?
解决方法
首先,先把你的分组统计结果存为变量,方便后续操作:
# 分组统计含'Death'的行数 state_grp = df.groupby(['State']) death_counts = state_grp['Measure name'].apply(lambda x: x.str.contains('Death').sum())
方法一:基于DataFrame的直观修改(推荐新手)
先把统计结果转成带列名的DataFrame:
death_counts_df = death_counts.reset_index(name='Sum')
然后用loc筛选出State包含字母'A'的行,直接修改Sum值:
# 对State含'A'的行,Sum乘2 death_counts_df.loc[death_counts_df['State'].str.contains('A'), 'Sum'] *= 2
执行后就能得到你想要的结果:
| State | Sum |
|---|---|
| AK | 246 |
| DC | 24 |
方法二:基于Series的直接处理
如果想直接在统计得到的Series上操作,需要通过index获取State值:
# 利用Series的index判断,符合条件则乘2 adjusted_counts = death_counts.where(~death_counts.index.str.contains('A'), death_counts * 2)
再转成DataFrame即可:
result_df = adjusted_counts.reset_index(name='Sum')
为什么你之前的apply没成功?
你之前尝试的apply(lambda x: ..)大概率是没正确获取到State值——在Series上使用apply时,lambda的参数是对应的值,而不是索引(State)。所以要判断State的话,需要通过操作Series的index或者在元素级apply时访问x.name来实现。
内容的提问来源于stack exchange,提问作者Bolicopito
相关产品推荐
相关产品推荐

