在这个多索引数据框中,
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()
在这里不起作用,因为次要索引也被平均为一个值。如何进行?
最佳答案
如评论中所述,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
现在,您已正确识别多层数据,您可以在其中创建不同样本的平均值。
关于python - 在 Pandas 中使用多索引数据帧进行高级平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24954117/