簡體   English   中英

使用 Pandas 分組的值的累積計數

[英]Cumulative count of values with grouping using Pandas

我有以下 DataFrame:

>>>> df = pd.DataFrame(data={
            'type': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
            'value': [0, 2, 3, 4, 0, 3, 2, 3, 0]})

>>> df
  type  value
0    A      0
1    A      2
2    A      3
3    B      4
4    B      0
5    B      3
6    C      2
7    C      3
8    C      0

我需要完成的是:對於每種類型,跟蹤非零值的累積計數,但每次遇到 0 值時從零開始。

  type  value  cumcount
0    A      0         NaN
1    A      2         1
2    A      3         2
3    B      4         1
4    B      0         NaN
5    B      3         1
6    C      2         1
7    C      3         2
8    C      0         NaN

想法是創建連續組並過濾掉非0值,最后使用過濾器分配給新列:

m = df['value'].eq(0)
g = m.ne(m.shift()).cumsum()[~m]

df.loc[~m, 'new'] = df.groupby(['type',g]).cumcount().add(1)
print (df)
  type  value  new
0    A      0  NaN
1    A      2  1.0
2    A      3  2.0
3    B      4  1.0
4    B      0  NaN
5    B      3  1.0
6    C      2  1.0
7    C      3  2.0
8    C      0  NaN

對於 pandas 0.24+ 可以使用Nullable integer 數據類型

df['new'] = df['new'].astype('Int64')
print (df)
  type  value  new
0    A      0  NaN
1    A      2    1
2    A      3    2
3    B      4    1
4    B      0  NaN
5    B      3    1
6    C      2    1
7    C      3    2
8    C      0  NaN

暫無
暫無

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

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