簡體   English   中英

另一列的唯一值第一次出現的計數器 pandas

[英]counter of first occurrence of unique values of another column pandas

給定如下所示的示例 df,我想找到val的所有唯一實例的增量計數器。 我得到的最接近的是df.groupby('val').cumcount()但顯然這不是我想要的。

df = pd.DataFrame({'val': [100, 101, 104, 104, 106, 108, 108, 108]})

期望的結果:

    val ctr
0   100 1
1   101 2
2   104 3
3   104 0
4   106 4
5   108 5
6   108 0
7   108 0

我們可以使用groupby ngroup來枚舉組 ( sort=False ) 如果想要組枚舉出現在 DataFrame 中的方式,然后mask duplicated的值:

s = df.groupby('val', sort=False).ngroup() + 1  # Get unique group number
df['ctr'] = s.mask(s.duplicated(), 0)  # Add in the 0s

df

   val  ctr
0  100    1
1  101    2
2  104    3
3  104    0
4  106    4
5  108    5
6  108    0
7  108    0

或者使用pd.factorizenp.whereduplicated值分配給 0:

import numpy as np

m = df['val'].duplicated()
df['ctr'] = np.where(m, 0, pd.factorize(df['val'])[0] + 1)

df

   val  ctr
0  100    1
1  101    2
2  104    3
3  104    0
4  106    4
5  108    5
6  108    0
7  108    0

如果您的“Val”序列已排序,您可以使用:

m = df['val'].ne(df['val'].shift())

df['ctr'] = np.where(m, m.cumsum(), 0)

結果:

print(df)

   val  ctr
0  100    1
1  101    2
2  104    3
3  104    0
4  106    4
5  108    5
6  108    0
7  108    0

暫無
暫無

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

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