python - 如果前一列中的值不同,则制作一个增加的计数器?

标签 python pandas counter

我正在制作一个计数器列,它仅在 (i-1) 的值与 i 的值不同时才增加。

下面是一个示例数据:

user_id sc_id
1         100
1         100
1         101
1         100
2         100
2         105
3         105
3         105

下面是我的代码:

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 .       100    3
2         100    4
2         105    5
3         105    6
3         105    6

错误:

KeyError: 0

最佳答案

使用GroupBy.ngroup :

df1 = df[['user_id','sc_id']].ne(df[['user_id','sc_id']].shift()).cumsum().add_prefix('g_')

df['subcat_counter'] = df.join(df1).groupby(['g_user_id','g_sc_id'], sort=False).ngroup() + 1
print (df)
   user_id  sc_id  subcat_counter
0        1    100               1
1        1    100               1
2        1    101               2
3        1    100               3
4        2    100               4
5        2    105               5
6        3    105               6
7        3    105               6

另一种解决方案:

s = df['user_id'].astype(str) + '_' + df['sc_id'].astype(str) 
df['subcat_counter'] = s.ne(s.shift()).cumsum()
print (df)

   user_id  sc_id  subcat_counter
0        1    100               1
1        1    100               1
2        1    101               2
3        1    100               3
4        2    100               4
5        2    105               5
6        3    105               6
7        3    105               6

关于python - 如果前一列中的值不同,则制作一个增加的计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55470065/

相关文章:

Java 计算堆排序中的交换次数

python - View 中的按钮

python - SQLAlchemy ORM 是大型数据的正确选择吗?

python - 用一行中的所有值拆分数据框

python - 通过 Pandas 数据框进行缓慢迭代

python - 在pandas dataframe python中减去两行的一系列列

Python:将二维数组插入 MySQL 表

python - 根据 DataFrame Python 中的条件更改特定列的值

java - 为什么我的计数器不能正常计数?尽管我的 if 语句未填写,但它添加了 +1

python - 计算文本文件中多篇文章中特定单词的频率