我想计算数据框中选定列中所有值的平均值。例如,我有一个包含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(),因此这不仅仅是一次计算。
答案 0 :(得分:1)
您可以通过DataFrame.stack
将DataFrame
重塑为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。