在这个多索引数据框中,
c1 c2 c3
major minor
a 1 -1.202766 -0.502679 1.915304
2 0.097658 0.604051 -0.497243
3 -1.285027 -1.200143 0.087209
d 3 -0.231444 1.518543 2.139600
4 -1.336436 -0.299769 -0.600134
5 -0.873389 1.949733 -0.757263
a 1 -0.222766 -2.302679 0.615304
2 1.047648 1.304051 -1.497243
3 -1.285027 -1.000143 0.087209
d 3 -0.631464 1.318543 0.139600
4 -0.316436 -0.193749 -1.500134
5 -0.693689 0.449753 -1.347263
我想得到重复主要指数的平均值,就像这样......
c1 c2 c3
major minor
a 1 -1.202766 -0.502679 1.915304
2 0.097658 0.604051 -0.497243
3 -1.285027 -1.200143 0.087209
d 3 -0.231444 1.518543 2.139600
4 -1.336436 -0.299769 -0.600134
5 -0.873389 1.949733 -0.757263
其中值是平均值。显然df.groupby(level='major').mean()
在这里不起作用,因为次要索引也平均为一个值。怎么办?
答案 0 :(得分:0)
如评论中所述,df.groupby(level=['major', 'minor']).mean().dropna()
将创建以两个轴为条件的平均值。
跟进评论中的讨论
对于具有非唯一列名称的错误数据结构案例,以下hack有效:
LL = [pd.DataFrame(pd.DataFrame(df[i]).mean(axis=1), columns=[i]) for i in df.columns.unique()]
pd.concat(LL, axis=1)
pd.DataFrame(df[i])
确保df[i]
为DataFrame
,以防列名称不是重复项。其余的只是收集数据帧然后堆叠它们。
更好的数据结构
假设您收集了不同的数据集:
id c1 c2 c1 c2
0 1 1 2 2
1 3 4 5 6
更好的方法是保存样本标识符
sample id c1 c2
0 0 1 1
1 0 2 2
0 1 3 4
1 1 5 6
现在,您拥有正确识别的多层数据,您可以在其中创建不同样本的平均值。