首页 > 解决方案 > 在列中添加具有累积唯一值计数的列

问题描述

我正在尝试添加一个包含唯一值出现数量的列,所以如果我的输入是:

id  |  score
 asd    15
 asd    20
 jk     76
 pz     54
 pz     37

我想添加这样的列

 id  | score  | count_ids
 asd    15           1
 asd    20           1
 jk     76           2
 pz     54           3
 pz     37           3

我已经看过这个答案Pandas add unique count column,尽管我觉得应该有一个更简洁的解决方案。

编辑

我也在寻找一个可扩展的解决方案,例如,如果我也有这个:

 id  |  game  |  score
 asd    1          15
 asd    2          20
 jk     1          76
 pz     1          54
 pz     1          37

得到

 id  |  game  |  score  | count_users
 asd    1          15         1
 asd    2          20         2
 jk     1          76         3
 pz     1          54         4
 pz     1          37         4

标签: pythonpandas

解决方案


我认为解决方案应该在没有帮助列的情况下简化:

df['count_ids'] = df['id'].ne(df['id'].shift()).cumsum()
print (df)
    id  score  count_ids
0  asd     15          1
1  asd     20          1
2   jk     76          2
3   pz     54          3
4   pz     37          3

编辑:对于多列解决方案是相似的,只为每行添加DataFrame.any至少一个测试:True

df['count_ids'] = df[['id', 'game']].ne(df[['id', 'game']].shift()).any(axis=1).cumsum()
print (df)

    id  game  score  count_ids
0  asd     1     15          1
1  asd     2     20          2
2   jk     1     76          3
3   pz     1     54          4
4   pz     1     37          4

详情

print (df[['id', 'game']].ne(df[['id', 'game']].shift()))
      id   game
0   True   True
1  False   True
2   True   True
3   True  False
4  False  False

推荐阅读