python - 如何对 MultiIndex pandas 数据框中的值进行排序?
问题描述
我有一个带有 MultiIndex 的 pandas DataFrame。我想对列的值进行排序,并比较索引 level0 中的值。如果值为最大值,则id应为1,如果值为secondary,则id应为2。最后,输出其排序后的id。
例如:
arrays = [['bar', 'bar','bar', 'baz', 'baz', 'foo', 'foo','foo', 'foo','qux', 'qux'],
['one', 'two', 'three','one', 'two', 'one', 'two','three', 'four', 'one', 'two']]
df = pd.DataFrame(np.random.randn(11), index=arrays,columns=['values'])
df
输出:
values
bar one -1.098567
two -0.936011
three -0.654245
baz one -0.637409
two -0.439939
foo one 0.238114
two 1.146573
three -0.512294
four -0.611913
qux one -0.481083
two 0.515961
最后,我想要这个:
values sort
bar one -1.098567 3
two -0.936011 2
three -0.654245 1
baz one -0.637409 2
two -0.439939 1
foo one 0.238114 2
two 1.146573 1
three -0.512294 3
four -0.611913 4
qux one -0.481083 2
two 0.515961 1
解决方案
在第一级(即0级)分组,然后按降序排列。
>>> df.assign(sort=df.groupby(level=0).rank(ascending=False))
values sort
bar one -1.098567 3
two -0.936011 2
three -0.654245 1
baz one -0.637409 2
two -0.439939 1
foo one 0.238113 2
two 1.146573 1
three -0.512295 3
four -0.611913 4
qux one -0.481083 2
two 0.515961 1
推荐阅读
- xpath - 如何在 XPath 中选择没有前置文本的文本节点?
- botframework - 是否可以从其他直接客户端的对话中向机器人发送活动?
- excel - 如何在excel上读取带有平滑线图的散点图?
- r - 如何对R中的下一列进行子集化
- python - 循环输入为 url 的函数
- python - 矩阵的中心
- ionic-framework - 不允许向该商家付款(clientId 无效) - Ionic iOS
- python - JSON 转换导致错误:''str' object has no attribute 'read''
- javascript - 导入多个属性并将它们存储到一个别名中
- javascript - p5.js map() 动态改变变量