Python 按自定义组分组

Python 按自定义组分组,python,pandas,aggregate,pandas-groupby,Python,Pandas,Aggregate,Pandas Groupby,假设我有这样一个数据帧: 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 我怎样才能按列B进行分组,使分组为a、a或B和a或B或c,而不仅仅是a、B和c?在本例中,假设我想通过'sum'聚合结果。然后,我会得出以下结论:

假设我有这样一个数据帧:

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
我怎样才能按列
B
进行分组,使分组为
a
a或B
a或B或c
,而不仅仅是
a
B
c
?在本例中,假设我想通过
'sum'
聚合结果。然后,我会得出以下结论:

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

我认为这真的取决于你想要使用的功能。 我可以想出一个技巧,例如,如果你想计算


已更新

我们也可以使用+

要获得预期的输出:

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

谢谢,这是一个很好的建议。然而,我对“典型的”
groupby
输出更感兴趣。我已经用一个示例输出更新了这个问题。
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
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