删除数据框中的重复项?

时间:2017-07-22 18:43:03

标签: python pandas dataframe

考虑以下数据框片段,该片段已按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

所有我想做的就是groupby Name,所以我连续19次没有同一个演员(例如,看到Meryl,她的Winner_Count,只有一次会很好),但排序的顺序是保留的。到目前为止,我已经收到了各种错误消息,有时还有一个对象引用。我还没有看到一张桌子。我在这里看到的一些帖子建议制作一个groupby对象需要比Wes McKinney的视频中显示的内容要多得多,这很奇怪。

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

编辑:

所需的数据集如下所示:每个actor有一行,而原始数据集中有几行。

        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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

但是,您似乎想要删除名称列的重复项。您可以使用.mean()之类的drop_duplicates

答案 2 :(得分:0)

对于获奖的奖项,您可以获得max

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