如何在熊猫中连续出现重复项进行分组

Moh*_* ah 5 python dataframe pandas pandas-groupby

我有一个包含两列 [Name,In.cl] 的数据框。我想按名称分组,但它基于连续发生。例如考虑下面的DataFrame,

生成以下 DF 的代码:

df=pd.DataFrame({'Name':['A','B','B','A','A','B','C','C','C','B','C'],'In.Cl':[2,1,5,2,4,2,3,1,8,5,7]})
Run Code Online (Sandbox Code Playgroud)

输入:

    In.Cl Name
0       2    A
1       1    B
2       5    B
3       2    A
4       4    A
5       2    B
6       3    C
7       1    C
8       8    C
9       5    B
10      7    C
Run Code Online (Sandbox Code Playgroud)

我想对连续重复的行进行分组。示例组 [B] (1,2), [A] (3,4), [C] (6,8) 等,并在 In.cl 列中执行求和运算。

预期输出:

    In.Cl Name col1   col2
0       2    A   A(1)    2
1       1    B   B(2)    6
2       5    B   B(2)    6
3       2    A   A(2)    6
4       4    A   A(2)    6
5       2    B   B(1)    2
6       3    C   C(3)   12
7       1    C   C(3)   12
8       8    C   C(3)   12
9       5    B   B(1)    5
10      7    C   C(1)    7
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试了重复和 groupby 的组合,但没有按我预期的那样工作。我想我需要一些 groupby + 连续的东西。但我没有解决这个问题的想法。

任何帮助,将不胜感激。

Max*_*axU 6

In [37]: g = df.groupby((df.Name != df.Name.shift()).cumsum())

In [38]: df['col1'] = df['Name'] + '(' + g['In.Cl'].transform('size').astype(str) + ')'

In [39]: df['col2'] = g['In.Cl'].transform('sum')

In [40]: df
Out[40]:
   Name  In.Cl  col1  col2
0     A      2  A(1)     2
1     B      1  B(2)     6
2     B      5  B(2)     6
3     A      2  A(2)     6
4     A      4  A(2)     6
5     B      2  B(1)     2
6     C      3  C(3)    12
7     C      1  C(3)    12
8     C      8  C(3)    12
9     B      5  B(1)     5
10    C      7  C(1)     7
Run Code Online (Sandbox Code Playgroud)