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

Get mean of multiple selected columns in a pandas dataframe

我想计算数据框中选定列中所有值的平均值。例如,我有一个包含 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() 之类的东西可以工作,但它 returns 每列的平均值,而不是合并平均值。有没有办法在不创建新数据框的情况下执行此操作?我还需要其他数据统计信息,如 .std()、.min()、max(),所以这不仅仅是一次性计算。

您可以通过 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 二维数组,然后使用 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

警告:只有当列的长度相同时才可以。否则它会给出错误的答案(正如评论所指出的那样)。

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

我知道你有两个选择:

对于 mean()、min()、max(),您可以使用均值的均值、最小值的最小值、最大值的最大值这将产生 A、C、E 的所有元素的均值、最小值、最大值.

所以你可以使用: 对于均值():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()  

对于最大值():

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 of std 不会给出所有元素的std。