【问题标题】:Unique values of two columns for pandas dataframe [duplicate]熊猫数据框两列的唯一值[重复]
【发布时间】:2017-07-04 13:00:23
【问题描述】:

假设我有 2 列的 pandas 数据框:

df: Col1  Col2
      1     1
      1     2
      1     2
      1     2
      3     4
      3     4

然后我想只保留这两列的唯一一对值(col1,col2)并给出它们的频率:

df2: Col1  Col2  Freq
      1     1     1
      1     2     3
      3     4     2

我想使用df['Col1', 'Col2'].value_counts(),但它只适用于一列。 是否存在处理多列的函数?

【问题讨论】:

  • df.groupby(['Col1', 'Col2']).size()?
  • 不明确的标题:这不会在 Col1 或 Col2 中找到唯一值,而是在 Col1 和 Col2 中找到 值的唯一组合,即笛卡尔积。这可能不是您想要的,尤其是对于基数高于布尔值(只有两个值)的列。

标签: python pandas dataframe unique


【解决方案1】:

你需要groupby + size + Series.reset_index:

df = df.groupby(['Col1', 'Col2']).size().reset_index(name='Freq')
print (df)
   Col1  Col2  Freq
0     1     1     1
1     1     2     3
2     3     4     2

【讨论】:

  • 感谢您的精彩回答。我试图通过一点一点地运行它来理解你的答案,我有几个问题:1.如果我只需要Col1和Col2,我应该使用什么,即我只需要唯一的值对对于前两列,您的答案仍然是最佳方法吗? 2. 为什么df.groupby(['Col1', 'Col2']).size() 会为我返回数据系列?再次感谢。
  • @BowenLiu - 1. 我认为它真的很快,也许一些 numpy 解决方案应该更快。 2. 在我看来,它按设计返回 Series - 不需要像聚合 mean、sum (df.groupby(['Col1', 'Col2'])['Col3'].sum()) 这样的另一列,因为输出由 groupby - Col1 和 @987654337 中定义的列计数@ - 它分组并且也在相同的列中计数。对于按Col1 和Col2 分组并聚合Col3 - 在groupby 之后的列表中的列,或者如果像df.groupby(['Col1', 'Col2']).sum() 一样省略它,它将在所有列中聚合总和。
  • 不敢相信我没有看到你的回复。在使用 pandas 几个月后阅读它现在对我来说更有意义。我唯一仍然没有得到的是reset_index(name = 'Freq') 部分。在 pandas 文档中,名称不是 reset_index 的 kwarg。您如何以这种方式命名 groupby 结果中不是索引的列?谢谢。
  • @BowenLiu - 哎呀,链接不正确,需要Series.reset_index - name 参数仅适用于Series
  • 非常感谢。我意识到我对group 的理解很肤浅,因此我试图推断出它的一些一般规则。是否有任何其他聚合函数,例如.size(),可以在不指定列的情况下生成系列(格式为df.groupby(['Col1']).function())。顺便说一句,你的许多帖子对我很有帮助。我想知道你是否可以分享你是如何对 Pandas 有如此深入和系统的理解的。
【解决方案2】:

你可以试试

df.groupby(['Col1', 'Col2']).size()

与 jez 的答案相比,对于不同的视觉输出,您可以扩展该解决方案

pd.DataFrame(df.groupby(['Col1', 'Col2']).size().rename('Freq'))

给予

           Freq
Col1 Col2      
1    1        1
     2        3
3    4        2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2020-04-13
    • 2021-08-12
    • 2018-08-16
    • 2020-10-01
    相关资源
    最近更新 更多