我使用pandas根据列(“D”)中的整数对n级数组进行排序。这是非常重要的继承权的集团保持一致的基础上,第一和第三级只有
我试过遵循this solution,其中排序基于索引A和B。但是,我希望根据所需输出中描述的索引A和C进行排序。我已经尝试使用numpy.lexsort()
来实现这一点,但是提供的链接中的答案并没有描述如何工作,所以我仍然很困惑
a = np.lexsort([results.tx.values,
results.groupby(level=[0,1]).tx.transform('sum').values,
results.groupby(level=0).tx.transform('sum').values])
这将基于第一个和第二个索引进行排序,如示例链接中所示
输入示例:
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 6
Child2 2
Child3 3
Par3 Child1 6
Child2 8
我得到的输出:
D
A B C
Gran2 Par3 Child2 8
Child1 6
Par2 Child1 6
Child3 3
Child2 2
Par1 Child1 3
Gran1 Par1 Child2 7
Child1 3
Child3 2
Par2 Child1 9
Child2 2
Par3 Child1 6
我想要的输出:
D
A B C
Gran1 Par2 Child1 9 <--
Child2 2
Gran2 Par3 Child1 6
Child2 8 <--
Gran1 Par1 Child1 3
Child2 7 <--
Child3 2
Gran2 Par2 Child1 6 <--
Child2 2
Child3 3
Par1 Child1 4 <--
Gran1 Par3 Child1 2 <--
如您所见,我希望将A+B索引对中的最高值与其所有子索引一起带到顶部,同时将B索引中的其他值分开。尝试这种排序时,保持索引C中的子级的顺序相同是有帮助的,但不是必需的。在此问题上的任何帮助将不胜感激,谢谢
编辑:我也希望按相反的顺序执行此操作,以便每个祖父母索引的最小值上升到顶部。请注意,此示例与上面的示例无关
期望输出:
D
A B C
Gran1 Par2 Child1 -15
Child2 -175 <--
Child3 -65
Gran2 Par3 Child1 -77 <--
Child2 8
Gran1 Par1 Child1 3
Child2 7
Child3 -12 <--
Gran2 Par2 Child1 6 <--
Child2 2
Child3 3
Par1 Child1 12 <--
Gran1 Par3 Child1 24 <--
我得到的输出:
D
A B C
Gran2 Par3 Child1 -77 <--
Child2 8
Gran1 Par2 Child1 -15
Child2 -175 <--
Child3 -65
Par1 Child1 3
Child2 7
Child3 -12 <--
Gran2 Par2 Child1 6 <--
Child2 2
Child3 3
Par1 Child1 12 <--
Gran1 Par3 Child1 24 <--
Edit2:我的第二个问题的答案是df.iloc[(df.groupby(level=[0,1]).D.transform('min')).argsort().values]
基于文本的答案
好像你需要
argsort
相关问题 更多 >
编程相关推荐