【问题标题】:Difference to group mean in a pandas data frame?熊猫数据框中的组均值差异?
【发布时间】:2017-12-30 05:30:44
【问题描述】:

假设我计算了在特定时间段内人们 (id) 吃了多少橙子 (Orange) 和苹果 (Apple)。我也知道他们是年轻还是年老(group)。 pandas 数据框可能如下所示:

df = pd.DataFrame({'id' : ['1','2','3','7'],
                   'group' : ['Young', 'Young', 'Old', 'Old'],
                       'Apple' : [7,2,5,4],
                       'Orange' : [3,6,4,4],
                       })

我们可以使用groupby() 轻松计算均值。例如:

df.Apple.groupby(df.group).mean()

输出

Old      4.5
Young    4.5

但是,假设我想知道每个人消耗的苹果和橙子的数量与群体平均值的差异有多少?

也就是说,输出应该是

df = pd.DataFrame({'id' : ['1','2','3','7'],
                   'group' : ['Young', 'Young', 'Old', 'Old'],
                       'Apple' : [7,2,5,4],
                       'Orange' : [3,6,4,4],
                       'Apple Difference' : [2.5, -2.5, 0.5, -0.5],
                       })

有没有办法用 pandas/numpy 做到这一点?抱歉,洛基问题最好/R

【问题讨论】:

    标签: python-3.x pandas mean difference pandas-groupby


    【解决方案1】:

    mean 需要 transformlengthdf 相同,并减去 sub

    print (df.groupby('group')['Apple'].transform('mean'))
    0    4.5
    1    4.5
    2    4.5
    3    4.5
    Name: Apple, dtype: float64
    
    df = pd.DataFrame({'id' : ['1','2','3','7'],
                       'group' : ['Young', 'Young', 'Old', 'Old'],
                           'Apple' : [7,2,5,4],
                           'Orange' : [3,6,4,4],
                           })
    df['Apple Difference'] = df['Apple'].sub(df.groupby('group')['Apple'].transform('mean'))
    print (df)
       Apple  Orange  group id  Apple Difference
    0      7       3  Young  1               2.5
    1      2       6  Young  2              -2.5
    2      5       4    Old  3               0.5
    3      4       4    Old  7              -0.5
    

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 2021-06-03
      • 1970-01-01
      • 2018-05-15
      • 2018-02-01
      • 2020-03-19
      • 1970-01-01
      • 2021-11-10
      • 2019-04-16
      相关资源
      最近更新 更多