获取熊猫数据框中多个选定列的平均值

时间:2020-04-25 13:10:42

标签: python pandas multiple-columns mean

我想计算数据框中选定列中所有值的平均值。例如,我有一个包含A,B,C,D和E列的数据框,我想要A,C和E列中所有值的均值。

import pandas as pd

df1 = pd.DataFrame( ( {'A': [1,2,3,4,5],
                      'B': [10,20,30,40,50],
                      'C': [11,21,31,41,51],
                      'D': [12,22,32,42,52],
                      'E': [13,23,33,43,53]} ) )

print( df1 )

print( "Mean of df1:", df1.mean() )

df2 = pd.concat( [df1['A'], df1['C'], df1['E'] ], ignore_index=True )
print( df2 )
print( "Mean of df2:", df2.mean() )

df3 = pd.DataFrame()
df3 = pd.concat( [ df3, df1['A'] ], ignore_index=True )
df3 = pd.concat( [ df3, df1['C'] ], ignore_index=True )
df3 = pd.concat( [ df3, df1['E'] ], ignore_index=True )
print( df3 )
print( "Mean of df3:", df3.mean() )

df2为我提供了正确的答案,但是我需要创建一个新的数据框来获取它。

我虽然可以使用类似df1['A', 'C', 'E'].mean()的方法,但是它返回每一列的平均值,而不是组合的平均值。有没有一种方法而无需创建新的数据框?我还需要其他数据统计信息,例如.std()、. min(),max(),因此这不仅仅是一次计算。

3 个答案:

答案 0 :(得分:1)

您可以通过DataFrame.stackDataFrame重塑为Series with Multiindex,然后使用mean

df2 = df1[['A', 'C', 'E']].stack()
print (df2)
0  A     1
   C    11
   E    13
1  A     2
   C    21
   E    23
2  A     3
   C    31
   E    33
3  A     4
   C    41
   E    43
4  A     5
   C    51
   E    53
dtype: int64

print( "Mean of df2:", df2.mean() )
Mean of df2: 22.333333333333332

另一个想法是将值转换为numpy 2d数组,然后使用np.mean

df21 = df1[['A', 'C', 'E']]
print( df21 )
   A   C   E
0  1  11  13
1  2  21  23
2  3  31  33
3  4  41  43
4  5  51  53

print(df21.to_numpy())
[[ 1 11 13]
 [ 2 21 23]
 [ 3 31 33]
 [ 4 41 43]
 [ 5 51 53]]

print( "Mean of df2:", np.mean(df21.to_numpy()) )
Mean of df2: 22.333333333333332

答案 1 :(得分:1)

注意:只有列长相同时,才可以。如果没有,它将给出错误的答案(如评论所指出)。

mean = df1[['A', 'C', 'E']].mean(axis=1).mean()    
print(mean)

答案 2 :(得分:0)

您知道我有两个选择:

对于mean(),min(),max(),您可以使用均值的均值,最小值的最小值,最大值的最大值,这将得出A,C,E的所有元素的平均值,最小值,最大值。 / p>

因此您可以使用: for mean():enter code here

df1[['A','C','E']].apply(np.mean).mean()
df1[['A','C','E']].values.mean() 

以上任何一项都应为您提供A,C,E列的所有元素的均值。

对于min():

df1[['A','C','E']].apply(np.min).min()
df1[['A','C','E']].values.min()  

对于max():

df1[['A','C','E']].apply(np.max).max()
df1[['A','C','E']].values.max() 

对于std()

df1[['A','C','E']].apply(np.std).std()    ##  this will not give error, but gives a 
                       value that is not what you want.
df1[['A','C','E']].values.std()    # this gives the std of all the elements of columns A, C, E.
std的

std不会给出所有元素的std。