如何计算熊猫数据框中的重复行?

新手上路,请多包涵

我正在尝试计算数据框中每种类型行的重复项。例如,假设我在 pandas 中有一个数据框,如下所示:

 df = pd.DataFrame({'one': pd.Series([1., 1, 1]),
                   'two': pd.Series([1., 2., 1])})

我得到一个看起来像这样的 df:

     one two
0   1   1
1   1   2
2   1   1

我想第一步是找到所有不同的唯一行,我这样做是:

 df.drop_duplicates()

这给了我以下 df:

     one two
0   1   1
1   1   2

现在我想从上面的 df ([1 1] 和 [1 2]) 中取出每一行,并计算每行在初始 df 中的次数。我的结果看起来像这样:

 Row     Count
[1 1]     2
[1 2]     1

我应该如何做这最后一步?

编辑:

这是一个更大的例子,以使其更清楚:

 df = pd.DataFrame({'one': pd.Series([True, True, True, False]),
                   'two': pd.Series([True, False, False, True]),
                   'three': pd.Series([True, False, False, False])})

给我:

     one three   two
0   True    True    True
1   True    False   False
2   True    False   False
3   False   False   True

我想要一个告诉我的结果:

        Row           Count
[True True True]       1
[True False False]     2
[False False True]     1

原文由 jss367 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 321
2 个回答

您可以 groupby 在所有列上调用 size 索引指示重复值:

 In [28]:
df.groupby(df.columns.tolist(),as_index=False).size()

Out[28]:
one    three  two
False  False  True     1
True   False  False    2
       True   True     1
dtype: int64

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

具体到您的问题,正如其他人提到的快速简便的方法是:

 df.groupby(df.columns.tolist(),as_index=False).size()

如果您想计算特定列的重复项:

 len(df['one'])-len(df['one'].drop_duplicates())

如果要计算整个数据帧的重复项:

 len(df)-len(df.drop_duplicates())

或者简单地说,您可以使用 DataFrame.duplicated(subset=None, keep=‘first’)

 df.duplicated(subset='one', keep='first').sum()

在哪里

子集:列标签或标签序列(默认使用所有列)

keep : {‘first’, ‘last’, False}, 默认 ‘first’

  • first :将重复项标记为 True,除了第一次出现。
  • last :将重复项标记为 True,除了最后一次出现。
  • False :将所有重复标记为 True。

原文由 Arash 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题