我有几个形状/类型相同但数值略有不同的数据框.我可以通过所有输入数据框的平均值轻松生成一个新的数据框:
df = pd.concat([input_dataframes])
df = df.groupby(df.index).mean()
我想对谐波均值(可能是scipy.stats.hmean函数)执行相同的操作.我尝试使用以下方法执行此操作:
.groupby(df.index).apply(scipy.stats.hmean)
但这改变了数据帧的结构.有没有更好的方法可以做到这一点,还是我需要使用更长的时间/手动的实现方式?
为了显示 :
df_input1:
'a' 'b' 'c'
'x' 1 1 2
'y' 2 2 4
'z' 3 3 6
df_input2:
'a' 'b' 'c'
'x' 2 2 4
'y' 3 3 6
'z' 4 4 8
desired output (but w/ hmean):
'a' 'b' 'c'
'x' 1.5 1.5 3
'y' 2.5 2.5 5
'z' 3.5 3.5 7
解决方法:
创建一个熊猫面板,并在“ item”轴上应用泛音均值函数.
数据框df1和df2的示例:
import pandas as pd
from scipy import stats
d = {'1':df1,'2':df2}
pan = pd.Panel(d)
pan.apply(axis='items',func=stats.hmean)
产量:
'a' 'b' 'c'
'x' 1.333333 1.333333 2.666667
'y' 2.400000 2.400000 4.800000
'z' 3.428571 3.428571 6.857143