pandas df 中的累计计数

Cumulative count in a pandas df

我正在尝试根据 pandas df 中的两列导出 cumulative count

下面的 df 就是一个例子。我正在尝试导出基于 ValueCountcount。因此,当 count 增加时,我想将其归因于相邻的 value

import pandas as pd

d = ({
    'Value' : ['A','A','B','C','D','A','B','A'],
    'Count' : [0,1,1,2,3,3,4,5],
    }) 

df = pd.DataFrame(d)

我用过这个:

for val in ['A','B','C','D']:
    cond = df.Value.eq(val) & df.Count.eq(int)
    df.loc[cond, 'Count_' + val] = cond[cond].cumsum()

如果我将 int 更改为特定数字,它将 return 计数。但是我需要这个来读取任何数字,因为 Count 列不断增加。

我的预期输出是:

  Value  Count  A_Count  B_Count  C_Count  D_Count
0     A      0        0        0        0        0
1     A      1        1        0        0        0
2     B      1        1        0        0        0
3     C      2        1        0        1        0
4     D      3        1        0        1        1
5     A      3        1        0        1        1
6     B      4        1        1        1        1
7     A      5        2        1        1        1

所以 count 增加 second row 所以 1Value ACountrow 4 上再次增加,这是 Value C 的第一次,所以 1rows 57 也一样。 countrow 8 上增加,因此 A 变为 2

您可以使用 str.get_dummiesdiff 以及 cumsum

In [262]: df['Value'].str.get_dummies().multiply(df['Count'].diff().gt(0), axis=0).cumsum()
Out[262]:
   A  B  C  D
0  0  0  0  0
1  1  0  0  0
2  1  0  0  0
3  1  0  1  0
4  1  0  1  1
5  1  0  1  1
6  1  1  1  1
7  2  1  1  1

这是

In [266]: df.join(df['Value'].str.get_dummies()
                  .multiply(df['Count'].diff().gt(0), axis=0)
                  .cumsum().add_suffix('_Count'))
Out[266]:
  Value  Count  A_Count  B_Count  C_Count  D_Count
0     A      0        0        0        0        0
1     A      1        1        0        0        0
2     B      1        1        0        0        0
3     C      2        1        0        1        0
4     D      3        1        0        1        1
5     A      3        1        0        1        1
6     B      4        1        1        1        1
7     A      5        2        1        1        1