猿问

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

如何按 colB分组,使组是a, a OR band a OR b OR c,而不仅仅是a, band c?为了示例的目的,假设我想通过 聚合结果'sum'。然后我会得到:


              A

a             3

a OR b        10 

a OR b OR c   21


慕沐林林
浏览 221回答 1
1回答

慕勒3428872

我认为这实际上取决于您要使用的功能。DataFrame.expanding例如,如果您想计算总和,我可以想到一个技巧。想法是我们可以利用扩展,然后只考虑选择了整个组的行Series.wheredf.expanding().sum().where(df['B'].ne(df['B'].shift(-1)))      A0   NaN1   3.02   NaN3  10.04   NaN5  21.0df.expanding().sum().where(df['B'].ne(df['B'].shift(-1))).loc[lambda x: x.A.notna()]      A1   3.03  10.05  21.0更新我们也可以使用DataFrame.groupby+DataFrame.expandingdf.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)                AB                a             3.0a or b       10.0a or b or c  21.0
随时随地看视频慕课网APP

相关分类

Python
我要回答