我有一个这样的DataFrame
Earns1 Earns2 Earns3
0 10 10 30
1 20 20 30
2 10 20 30
我想计算所有9个值的平均值(即,同时在行和列上分别应用聚合函数)。我可以融化它,只在value列上进行操作,但是感到奇怪的是,这是最好的方法。有任何想法吗?也许套用地图?
Expected result: 20 (mean of [10, 20, 10, 10, 20, 20, 30, 30, 30])
编辑:我忘了解释这一点,它的想法是多次执行,可能对整个数据框使用groupby(by =“ Class_column”)而不是一次。
祝你有美好的一天:)
答案 0 :(得分:3)
将值转换为numpy数组,然后使用mean
:
a = df.to_numpy().mean()
#older pandas versions
#a = df.values.mean()
print (a)
20.0
编辑:您可以将GroupBy.apply
与lambda函数结合使用来解决每个组的问题:
print (df)
Earns1 Earns2 Earns3 Class_column
0 10 10 30 a
1 20 20 30 b
2 10 20 30 b
df = (df.groupby(by="Class_column")
.apply(lambda x: x.to_numpy().mean())
.reset_index(name='aggregated'))
print (df)
Class_column aggregated
0 a 16.666667
1 b 21.666667
答案 1 :(得分:0)
假设您的数据帧称为df
:
df.mean().mean()
答案 2 :(得分:0)
尝试一下:
Earns1=[10,20,10]. # creation of data frame
Earns2=[10,20,20]
Earns3=[30,30,30]
df = pd.DataFrame({'Earns1':Earns1,'Earns2':Earns2,'Earns3':Earns3})
df=df.to_numpy().transpose().reshape(df.size,order='C') # converting from 2D array to 1D array
print('result: {} (mean of {})'.format(df.mean(),list(df))) # printing result
您有什么问题吗?