【问题标题】:Duplicate rows in pandas DF熊猫DF中的重复行
【发布时间】:2014-09-02 22:20:17
【问题描述】:

我在 Pandas 中有一个 DF,它看起来像:

Letters Numbers
A       1
A       3
A       2
A       1
B       1
B       2
B       3
C       2
C       2

我希望计算相似行的数量并将结果保存在第三列中。例如,我正在寻找的输出:

Letters Numbers Events
A       1       2
A       2       1
A       3       1
B       1       1
B       2       1
B       3       1
C       2       2

我想要做的一个例子是here。我想出的最好办法是使用count_values(),但我认为这只是一列。另一个想法是使用duplicated(),反正我不想构造任何for-loop。我很确定,存在 Python 式的 for 循环替代方案。

【问题讨论】:

    标签: pandas count duplicates row


    【解决方案1】:

    您可以按这两列进行分组,然后计算组的大小:

    In [16]: df.groupby(['Letters', 'Numbers']).size()
    Out[16]: 
    Letters  Numbers
    A        1          2
             2          1
             3          1
    B        1          1
             2          1
             3          1
    C        2          2
    dtype: int64
    

    要获得示例输出中的 DataFrame,您可以使用 reset_index 重置索引。

    【讨论】:

    • 您能否提供额外的代码来实现reset_index() 以获得所需的输出。我正在尝试用更多我想要分组的列来做同样的事情。
    • @oliversm df.groupby(['Letters', 'Numbers']).size().reset_index(drop=True)
    【解决方案2】:

    您可以使用groupbytransformdrop_duplicates 的组合

    In [84]:
    
    df['Events'] = df.groupby('Letters')['Numbers'].transform(pd.Series.value_counts)
    df.drop_duplicates()
    Out[84]:
      Letters  Numbers  Events
    0       A        1       2
    1       A        3       1
    2       A        2       1
    4       B        1       1
    5       B        2       1
    6       B        3       1
    7       C        2       2
    

    【讨论】:

    • 谢谢,不过我暂时看不懂groupby方法的语法。不应该是 groupby(['Letters', 'Numbers'])?
    • 不,这仅按字母分组,然后为每组计算数字中值的出现次数。然后,这与按两列分组并计算组的大小相同。
    • @joris 忽略最后一条评论
    猜你喜欢
    • 2020-06-20
    • 2021-10-27
    • 2019-10-23
    • 1970-01-01
    • 2021-02-25
    • 2017-01-23
    • 2017-11-02
    • 2021-10-31
    • 2019-05-06
    相关资源
    最近更新 更多