python - 对熊猫多索引中每个级别 1 的值进行排序
问题描述
我有一个带有多索引的数据框,第一级是 company_ID,第二级是时间戳。如何根据每个月的分数获得所有公司的排名?
Score
company_idx timestamp
10006 2010-01-31 69.875394
2010-11-30 73.640693
2010-12-31 73.286248
2011-01-31 73.660052
2011-02-28 74.615564
2011-03-31 73.535187
2011-04-30 72.491390
2012-01-31 72.162768
2012-02-29 61.637952
2012-03-31 59.445419
2012-04-30 25.685615
2012-05-31 8.047693
2012-06-30 58.341200
...
9981 2016-12-31 51.011261
2018-05-31 54.462832
2018-06-30 57.126250
2018-07-31 54.695835
2018-08-31 63.758145
2018-09-30 63.255583
2018-10-31 62.069697
2018-11-30 62.795650
2018-12-31 63.045329
2019-01-31 60.276990
2019-02-28 56.666379
2019-03-31 57.903213
2019-04-30 57.558973
2019-05-31 52.260287
我试过这样做:
df2 = df.sort_index(by='Score', ascending=False)
但这并没有让我得到我想要的。你能帮忙吗?我对多级数据框很陌生。非常感谢!
解决方案
您应该先将索引级别交换为月份,然后按时间戳升序和分数降序排序:
df.index = df.index.swaplevel()
df.sort_values(['timestamp', 'Score'], ascending=[True, False], inplace=True)
您的样本值不会给出有趣的结果,因为只有一家公司有一个月的得分值。
要提取一个月的值,您可以使用df.xs(month_value, level=0)
将在多索引中下降一个级别,或者df.xs(month_value, level=0, drop_level=False)
将保留它。
推荐阅读
- android - EditText ,输入的文本不完整可见
- sql - 为特定数据库运行 .sql 脚本
- javascript - 使用 javascript XMLHttpRequest 将数据(图像和其他一些参数)发送到 php
- gcloud - 部署到 gcloud 会产生可怕的构建错误
- bash - 检查bash中文件名的最后一个字符
- python - 对导入模块感到困惑。模块不是从同一文件夹中导入的||?
- python - Tensorflow cuDNN 模型执行的延迟问题
- r - JSON 解析错误:字符串被截断
- python-2.7 - 如何在 Windows 上准确安装 pip,尤其是处理命令提示符的部分?
- wordpress - 购物车上的 Woocommerce 价格错误