获取 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.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 二维数组,然后使用 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。
我想计算数据框中选定列中所有值的平均值。例如,我有一个包含 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.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 二维数组,然后使用 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。