【问题标题】:Calculate mean of each column of pandas dataframe based on condition (i.e. averageifs)根据条件(即averageifs)计算熊猫数据框每列的平均值
【发布时间】:2019-07-18 20:08:03
【问题描述】:

我不知道为什么我在这个问题上如此努力。我正在尝试在 pandas 数据框中进行与 averageifs calc 等效的 excel。

我有以下几点:

df = pd.DataFrame(rng.rand(1000, 7), columns=['1/31/2019', '2/28/2019', '3/31/2019', '4/30/2019', '5/31/2019', '6/30/2019', '7/31/2019'])

我也有专栏:

df['Doc_Number'] = ['A', 'B', 'C', 'B', 'C', 'B', 'A', 'A', 'D', 'G', 'G', 'D', 'G', 'B' ...]

我想在 df 的每一列的 Doc_Number 上执行与 averageifs 等效的 excel,同时保持数据框的结构。所以在每一列中,我会计算平均值 if df['Doc_Number'] = ['A', 'B', 'C'...] 但我仍然会保持 1,000 行并且我会应用计算到每个单独的列 ['1/31/2019'、'2/28/2019'、'3/31/2019' ...]。

对于单个列,我会执行以下操作:

df['AverageIfs'] = df.groupby('Doc_Number')['1/31/2019'].transform('np.mean')

但是如何将计算应用于 df 的每一列?实际上,我有更多的列可以应用计算。

我是一个完全的业余爱好者,所以感谢您接受我的问题。

【问题讨论】:

    标签: pandas dataframe mean


    【解决方案1】:

    您可以在 groupby 之后删除 ['1/31/2019'] 以将所有列处理为新的 DataFramme,将列名称更改为 add_suffix 并添加到原始 join

    #simplify df for easy check output
    np.random.seed(123)
    df = pd.DataFrame(np.random.rand(14, 2), columns=['1/31/2019', '2/28/2019'])
    df['Doc_Number'] = ['A', 'B', 'C', 'B', 'C', 'B', 'A', 'A', 'D', 'G', 'G', 'D', 'G', 'B']
    
    print (df)
        1/31/2019  2/28/2019 Doc_Number
    0    0.696469   0.286139          A
    1    0.226851   0.551315          B
    2    0.719469   0.423106          C
    3    0.980764   0.684830          B
    4    0.480932   0.392118          C
    5    0.343178   0.729050          B
    6    0.438572   0.059678          A
    7    0.398044   0.737995          A
    8    0.182492   0.175452          D
    9    0.531551   0.531828          G
    10   0.634401   0.849432          G
    11   0.724455   0.611024          D
    12   0.722443   0.322959          G
    13   0.361789   0.228263          B
    

    df = df.join(df.groupby('Doc_Number').transform('mean').add_suffix('_mean'))
    print (df)
        1/31/2019  2/28/2019 Doc_Number  1/31/2019_mean  2/28/2019_mean
    0    0.696469   0.286139          A        0.511029        0.361271
    1    0.226851   0.551315          B        0.478146        0.548364
    2    0.719469   0.423106          C        0.600200        0.407612
    3    0.980764   0.684830          B        0.478146        0.548364
    4    0.480932   0.392118          C        0.600200        0.407612
    5    0.343178   0.729050          B        0.478146        0.548364
    6    0.438572   0.059678          A        0.511029        0.361271
    7    0.398044   0.737995          A        0.511029        0.361271
    8    0.182492   0.175452          D        0.453474        0.393238
    9    0.531551   0.531828          G        0.629465        0.568073
    10   0.634401   0.849432          G        0.629465        0.568073
    11   0.724455   0.611024          D        0.453474        0.393238
    12   0.722443   0.322959          G        0.629465        0.568073
    13   0.361789   0.228263          B        0.478146        0.548364
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 2020-01-11
      • 2018-10-26
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多