繁体   English   中英

Pandas groupby 自定义组

[英]Pandas groupby custom groups

假设我有一个这样的数据框:

df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6], 'B': ['a', 'a', 'b', 'b', 'c', 'c']})
print(df)

   A  B
0  1  a
1  2  a
2  3  b
3  4  b
4  5  c
5  6  c

如何按 col B分组,使组为aa OR ba OR b OR c ,而不仅仅是abc 为了这个例子,假设我想按'sum'聚合结果。 然后我会得到:

              A
a             3
a OR b        10 
a OR b OR c   21

我认为这真的取决于您要使用的功能。 例如,如果您想计算总和,我可以想到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM