3

我想根据两列的值创建两个 cumcount 列。

在下面的示例中,我希望 colA 至少为 100 时开始一个 cumcount,而 colB 至少为 10 时开始另一个 cumcount。

columns = ['ID', 'colA', 'colB', 'cumcountA', 'cumountB']
data = [['A', 3, 1, '',''],
    ['A', 20, 4, '',''],
    ['A', 102, 8, 1, ''],
    ['A', 117, 10, 2, 1],
    ['B', 75, 0, '',''],
    ['B', 170, 12, 1, 1],
    ['B', 200, 13, 2, 2],
    ['B', 300, 20, 3, 3],     
   ]

pd.DataFrame(columns=columns, data=data)

    ID  colA    colB    cumcountA   cumountB
0   A   3   1       
1   A   20  4       
2   A   102 8   1   
3   A   117 10  2   1
4   B   75  0       
5   B   170 12  1   1
6   B   200 13  2   2
7   B   300 20  3   3

我将如何计算cumcountAcumcountB

4

1 回答 1

3

您可以尝试设置df.clip lower= your values(此处为 100 和 10),然后比较 groupbyIDcumsum

col_list = ['colA','colB']
val_list = [100,10]

df[['cumcountA','cumountB']] = (df[col_list].ge(df[col_list].clip(lower=val_list,axis=1))
                                 .groupby(df['ID']).cumsum().replace(0,''))
print(df)

或者直接比较可能会更好:

df[['cumcountA','cumountB']] = (df[['colA','colB']].ge([100,10])
                               .groupby(df['ID']).cumsum().replace(0,''))
print(df)

  ID  colA  colB cumcountA cumountB
0  A     3     1                   
1  A    20     4                   
2  A   102     8         1         
3  A   117    10         2        1
4  B    75     0                   
5  B   170    12         1        1
6  B   200    13         2        2
7  B   300    20         3        3
于 2020-05-31T19:26:32.243 回答