【问题标题】:Pandas: Replace duplicates by their mean values in a dataframe [duplicate]熊猫:用数据框中的平均值替换重复项[重复]
【发布时间】:2019-06-06 20:54:39
【问题描述】:

我一直在使用 Pandas 中的数据框,其中包含重复条目以及列中的非重复条目。数据框看起来像这样:

    country_name  values  category
0   country_1     10       a
1   country_2     20       b
2   country_1     50       a
3   country_2     10       b
4   country_3     100      c
5   country_4     10       d

我想写一些东西,用我的数据框中的平均值转换(替换)重复项。理想的输出类似于以下内容:

    country_name  values    category
0   country_1      30        a
1   country_2      15        b
2   country_3      100       c
3   country_4      10        d

我已经为此苦苦挣扎了一段时间,因此我将不胜感激。我忘记添加类别列。 groupby() 方法的问题就像您现在调用 mean() 时一样,它不会返回 category 列。我的解决方案是采用数字列,并将具有重复项的列一起应用groupby().mean(),然后连接回分类列。所以我正在寻找比我所做的更短的解决方案。
当您处理许多分类列时,我的方法会变得乏味。

【问题讨论】:

    标签: pandas duplicates aggregate


    【解决方案1】:

    你可以使用 df.groupby():

    df.groupby('country_name').mean().reset_index()
    

    【讨论】:

    • 感谢您的回复。我解决了我的问题。所以真正的问题是当您应用groupby() 方法删除重复项时的分类列。很抱歉造成混乱。
    • @cyber-math 在这种情况下,下面的代码有效:df.groupby('country_name').agg({'values': 'mean', 'category': lambda x: pd.unique(x)}).reset_index()
    • 啊,但是当你有更复杂的分类列时它就不起作用了
    • 再试一次:df[~df.duplicated(subset=['country_name', 'category'])].groupby('country_name').transform('mean').join(df[['country_name', 'category']][~df.duplicated(subset=['country_name', 'category'])])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2020-02-03
    • 2020-03-03
    相关资源
    最近更新 更多