【问题标题】:Pandas Dataframe: How to create a column of incremental unique value count of another column [duplicate]Pandas Dataframe:如何创建另一列的增量唯一值计数列[重复]
【发布时间】:2020-11-26 04:58:58
【问题描述】:

考虑示例数据框('value' 列在这里没有意义):

df = pd.DataFrame({'key':list('AABBBC'), 'value': [1, 2, 3, 4, 5, 6]})

我想要的是一个仅计算“键”列的唯一值的列,需要注意的是值计数将递增,并且仅当单元格值未出现在前几行中时计数才会增加。所以这里“A”将被赋值为 1,“B”为 2,“C”为 3。

想要的结果如下所示:

现在我只能通过几个步骤来实现:

df1 = df.drop_duplicates('key').reset_index(drop = True).drop(columns = ['value'])
df1['count_unique'] = df1.index+1


pd.merge(df, df1.set_index(['key']), left_on = ['key'], right_index= True, how = 'left')

它看起来不是很 Pythonic,也不是最有效的。任何建议表示赞赏。

【问题讨论】:

    标签: python pandas count


    【解决方案1】:

    是吗:

    df['count_unique'] = df['key'].factorize()[0] + 1
    

    输出:

      key  value  count_unique
    0   A      1             1
    1   A      2             1
    2   B      3             2
    3   B      4             2
    4   B      5             2
    5   C      6             3
    

    【讨论】:

    • 太棒了。非常感谢。我应该使用一组列作为我的示例。这可以应用于多列的唯一值吗?谢谢!
    • @BowenLiu 查看 dup 链接。 df.groupby(['col1', 'col2']).ngroup().
    • 太棒了。我已经努力了几个小时才能找到简洁的方法。你把它们放在一个银盘子里给我。非常感谢广!
    • 只是以下问题:为什么ngroup 似乎没有按升序返回结果,即使我明确传递了`ascending = True'?
    • groupby 中传递sort=False。如果没有这个,groupby 将按关键列对数据进行排序,并按照此顺序枚举组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2018-08-25
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多