【问题标题】:Dropping duplicates in a dataframe?在数据框中删除重复项?
【发布时间】:2020-07-21 02:01:22
【问题描述】:

考虑以下数据帧 sn-p,它已按 Winner_Count 排序。

        Year    Award          Winner   Name    Winner_Count    Winner_Pct
9347    2011    Best Actress    1.0 Meryl Streep    19           0.010144
9098    2009    Best Actress    0.0 Meryl Streep    19           0.010144
7483    1995    Best Actress    0.0 Meryl Streep    19           0.010144
6389    1985    Best Actress    0.0 Meryl Streep    19           0.010144
7835    1998    Best Actress    0.0 Meryl Streep    19           0.010144

我只想按名称分组,这样我就不会连续 19 次使用同一个演员(例如,只看到一次 Meryl 和她的 Winner_Count 就可以了),但保留了排序顺序.到目前为止,我收到了各种错误消息,有时还收到了对象引用。我还没有看到一张桌子。我在这里看到的一些帖子建议使 groupby 对象出现需要比 Wes McKinney 的视频中显示的内容多得多的工作,这很奇怪。

为什么这不是一个简单的df_new = df.groupby('Name')?当/如果出现引用时,为什么对象不会自动出现?我似乎缺少关于 groupby 对象的一些基本内容,需要更正。想法?

编辑:

所需的数据集如下所示:每个参与者一行,而在原始数据集中,会有多个。

        Year    Award          Winner   Name    Winner_Count    Winner_Pct
9347    2011    Best Actress    1.0 Meryl Streep       19       0.010144
5953    1981    Best Actress    1.0 Katharine Hepburn  12       0.006407
657     1938    Best Actress    1.0 Bette Davis        10       0.005339

【问题讨论】:

  • 当你执行df.groupby('Name') - Pandas 应该如何知道你想对除“分组”列之外的所有列做什么 - Name?你能发布你想要的数据集吗?
  • 我认为你应该使用df.drop_duplicates(subset='Name')
  • @MaxU - 已编辑以显示所需的数据集。我是否应该从您的评论中推断出,如果我有超过 2 列,我必须告诉 groupby 如何处理所有列,或者删除所有不必要的列?
  • 在这种情况下,您可以像 COLDSPEED 建议的那样简单地使用 DataFrame.drop_duplicates...
  • 编辑了标题,使其对未来的读者更加规范。希望没关系。

标签: python pandas dataframe


【解决方案1】:

根据您的编辑,我认为您需要df.drop_duplicates

In [352]: df_revised = df.drop_duplicates(subset='Name'); df_revised
Out[352]: 
   Year         Award  Winner          Name  Winner_Count  Winner_Pct
0  2011  Best Actress     1.0  Meryl Streep            19    0.010144

它保留第一行并删除所有其余的重复项。如果您的数据按年份排序,这会很好。

如果没有,先用df.sort_values排序:

In [358]: df.sort_values(by=['Name', 'Year'], ascending=False, inplace=True)

【讨论】:

  • df_revised = df.drop_duplicates('Name') -- 似乎工作得很好,保留了 Winner_Count 上的排序。谢谢!
  • @Ryan 非常感谢,补充说。另外,没有问题 :)
【解决方案2】:

如果你只输入df_new = df.groupby('Name'),它会给你一个groupby对象。我们必须在 groupby 之后使用聚合函数,例如 .sum().mean() 等。

但是,您似乎想删除重复的名称列。你可以做的是使用drop_duplicates,比如df_new = df.drop_duplicates('Name')

【讨论】:

    【解决方案3】:

    您可以通过max获得所获奖项。

    df.groupBy("Name").max("winner_count")
    

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2016-10-01
      • 2019-05-12
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2022-11-01
      相关资源
      最近更新 更多