python - 从多索引数据框中删除最后一行
问题描述
我有一个看起来像这样的 Pandas 数据框:
close volume
date ticker
2017-01-03 AAPL 116.15 28781865.0
AMZN 753.67 3521066.0
MSFT 62.58 20694101.0
TSLA 216.99 5923254.0
2017-01-04 AAPL 116.02 21118116.0
AMZN 757.18 2510526.0
MSFT 62.30 21339969.0
TSLA 226.99 11213471.0
2017-01-05 AAPL 116.61 22193587.0
AMZN 780.45 5830068.0
MSFT 62.30 24875968.0
TSLA 226.75 5911695.0
2017-01-06 AAPL 117.91 31751900.0
AMZN 795.99 5986234.0
MSFT 62.84 19922919.0
TSLA 229.01 5527893.0
2017-01-09 AAPL 118.99 33561948.0
AMZN 796.92 3446109.0
MSFT 62.64 20382730.0
TSLA 231.28 3979484.0
2017-01-10 AAPL 119.11 24462051.0
AMZN 795.90 2558369.0
MSFT 62.62 18593004.0
TSLA 229.87 3659955.0
我想删除“日期”索引级别中的所有行,但最近的日期除外,它始终是最后一行。所以在这种情况下,结果应该是:
close volume
date ticker
2017-01-10 AAPL 119.11 24462051.0
AMZN 795.90 2558369.0
MSFT 62.62 18593004.0
TSLA 229.87 3659955.0
我努力了
pricing.drop(pricing.index[0:len(pricing)-1])
但这着眼于'ticker'级别而不是日期级别,仅返回最后一行而不是最后一个日期的所有行:
close volume
date ticker
2017-01-10 TSLA 229.87 3659955.0
我尝试将 level=0 或 level='date' 添加到它,但它只会返回完整的数据帧而不会丢失任何内容。
有谁知道这样做的好方法?
解决方案
用于Index.get_level_values
第一级的值,通过索引选择最后一个,最后通过DataFrame.xs
with选择drop_level
以避免删除第一级:
df = df.xs(df.index.get_level_values(0)[-1], drop_level=False)
print (df)
close volume
date ticker
2017-01-10 AAPL 119.11 24462051.0
AMZN 795.90 2558369.0
MSFT 62.62 18593004.0
TSLA 229.87 3659955.0
另一种解决方案:
df = df.loc[[df.index[-1][0]], :]
print (df)
close volume
date ticker
2017-01-10 AAPL 119.11 24462051.0
AMZN 795.90 2558369.0
MSFT 62.62 18593004.0
TSLA 229.87 3659955.0
详情:
print (df.index[-1])
('2017-01-10', 'TSLA')
print (df.index[-1][0])
2017-01-10
推荐阅读
- mysql - Mysql 查看新的字段值
- python - 为什么'os'作为我的包的子模块出现
- laravel - IE中的Vuejs模板
- javascript - 如何使用角度 5 动态更改 JSON 对象中的单选框值
- java - 将 JSON 响应以原始格式保存在 json 文件中
- git - 使用 apm 发布带有 git 子模块的包会包含子模块吗?
- oracle - 如何更新和下一步选择 PL/SQL
- ssh - 将自己锁定在 SSH 之外,Plesk 访问可用
- java - 从 MySQL 数据库读取文本文件并写入项目文件夹时多写一行
- javascript - 使用javascript从常量数组中删除项目