首页 > 解决方案 > 如果前一列中的值不同,则计数器会增加,但在其他列值更改时会重置?

问题描述

我正在制作一个计数器列,仅当 (i-1) 的值与 (i) 的值不同时才会增加,但当 user_id 更改时它会重置。

输入:

user_id sc_id
1         100
1         100
1         101
1         102
2         100
2         101
3         101
3         103

下面是我的代码:

df['subcat_counter'] = 1

for i in range(1,len(df)):
    if df.sc_id[i-1]==df.sc_id[i] and df['user_id'][i-1]==df['user_id'][i]:
        df.at[i,'subcat_counter']=df.subcat_counter[i-1]
    else:
        df.at[i,'subcat_counter']=df.subcat_counter[i-1]+1

以下是所需的输出:

user_id sc_id   subcat_counter
1         100    1
1         100    1
1         101    2
1         102    3
2         100    1
2         101    2
3         101    1
3         103    2

标签: pythonpandas

解决方案


我们可以groupbycumcount此之前删除重复项,以便每个相同,user_idsc_id获得相同的subcat_counter. 之后fillna我们forwardfill (ffill)

df['subcat_counter'] = df.drop_duplicates(['user_id', 'sc_id'])\
                       .groupby(['user_id'])['sc_id']\
                       .cumcount()+1

df.fillna(method='ffill', inplace=True)

print(df)
   user_id  sc_id  subcat_counter
0        1    100             1.0
1        1    100             1.0
2        1    101             2.0
3        1    102             3.0
4        2    100             1.0
5        2    101             2.0
6        3    101             1.0
7        3    103             2.0

推荐阅读