簡體   English   中英

熊貓df中的累積計數

[英]Cumulative count in a pandas df

我正在嘗試基於pandas df兩列導出cumulative count

以下是df 我試圖導出count基於關ValueCount 因此,當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更改為特定數字,它將返回計數。 但是我需要它來讀取任何數字,因為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

因此, second rowcount增加,因此1變為Value A Countrow 4再次增加,這是Value C的首次出現,因此1 對第rows 5和第7 rows 5再次相同。 countrow 8增加,因此A變為2

您可以使用str.get_dummies以及diffcumsum

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

暫無
暫無

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

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