使用 pandas 0.20.3,我尝试按列('D')对数据帧的 n 个多级进行排序,其中的值(降序),以便维护组的层次结构。
输入示例:
D
A B C
Gran1 Par1 Child1 3
Child2 7
Child3 2
Par2 Child1 9
Child2 2
Par3 Child1 6
Gran2 Par1 Child1 3
Par2 Child1 8
Child2 2
Child3 3
Par3 Child1 6
Child2 8
期望的结果:
D
A B C
Gran2 Par3 Child2 8
Child1 6
Par2 Child1 8
Child3 3
Child2 2
Par1 Child1 3
Gran1 Par1 Child2 7
Child1 3
Child3 2
Par2 Child1 9
Child2 2
Par3 Child1 6
与排序和排序多级索引相关的其他问题的解决方案似乎集中于对索引的实际级别进行排序或在对列进行排序时保持索引的顺序。我没有找到多级排序,其中列的值用于按该特定级别的聚合值对索引进行排序。非常感谢任何建议。
您需要创建三个单独的数组并按所有数组的组合进行排序。在这个例子中,我使用 Numpy 的np.lexsort
进行排序,然后我使用iloc
尊重这种人。最后,我用a[::-1]
以获得反向排序。
a = np.lexsort([
df.D.values,
df.groupby(level=[0, 1]).D.transform('sum').values,
df.groupby(level=0).D.transform('sum').values
])
df.iloc[a[::-1]]
D
A B C
Gran2 Par3 Child2 8
Child1 6
Par2 Child1 8
Child3 3
Child2 2
Par1 Child1 3
Gran1 Par1 Child2 7
Child1 3
Child3 2
Par2 Child1 9
Child2 2
Par3 Child1 6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)