簡體   English   中英

Pandas groupby cumcount 從具有特定列值的行開始

[英]Pandas groupby cumcount starting on row with a certain column value

我想根據兩列的值創建兩個 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

您可以嘗試設置df.clip lower = your values (此處為 100 和 10),然后比較 groupby IDcumsum

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM