根据条件(即平均值)计算熊猫数据框各列的平均值

时间:2019-02-25 12:08:08

标签: pandas dataframe mean

我不知道为什么我要为此努力地努力。我正在尝试在熊猫数据框中执行平均值计算的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上做均等值的excel等效,同时保持数据帧的结构。因此,在每列中,如果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')

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

我是一个完全的业余爱好者,非常感谢您提出我的问题。

1 个答案:

答案 0 :(得分:2)

您可以在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