为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas groupby 自定义组

Pandas groupby 自定义组

慕沐林林 2022-07-05 19:37:31
假设我有一个这样的数据框:df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6], 'B': ['a', 'a', 'b', 'b', 'c', 'c']})print(df)   A  B0  1  a1  2  a2  3  b3  4  b4  5  c5  6  c如何按 colB分组,使组是a, a OR band a OR b OR c,而不仅仅是a, band c?为了示例的目的,假设我想通过 聚合结果'sum'。然后我会得到:              Aa             3a OR b        10 a OR b OR c   21
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我认为这实际上取决于您要使用的功能。DataFrame.expanding例如,如果您想计算总和,我可以想到一个技巧。想法是我们可以利用扩展,然后只考虑选择了整个组的行Series.where


df.expanding().sum().where(df['B'].ne(df['B'].shift(-1)))

      A

0   NaN

1   3.0

2   NaN

3  10.0

4   NaN

5  21.0

df.expanding().sum().where(df['B'].ne(df['B'].shift(-1))).loc[lambda x: x.A.notna()]


      A

1   3.0

3  10.0

5  21.0

更新


我们也可以使用DataFrame.groupby+DataFrame.expanding


df.groupby('B').sum().expanding().sum()

要获得预期的输出:


new_df = (df.groupby('B').sum().expanding().sum()

            .reset_index()

            .assign(B = lambda x: x.B.add(' or ').cumsum()

                                  .str.rstrip(' or '))

            .set_index('B') )

print(new_df)

                A

B                

a             3.0

a or b       10.0

a or b or c  21.0


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号