python - 在多索引数据集中按名称引用 pandas 索引
问题描述
我有一个从 xarray 数据集转换而来的 pandas 数据框,该数据集具有三个索引。
XTIME windspeed direction \
Time lat lon
0 -36.457836 146.200153 2017-10-31 01:00:00 6.299611 0.853234
146.208487 2017-10-31 01:00:00 6.479416 0.794886
146.216820 2017-10-31 01:00:00 6.661458 0.736131
146.225153 2017-10-31 01:00:00 6.511693 0.702716
146.233487 2017-10-31 01:00:00 6.218874 0.725511
... ... ... ...
463 -37.599502 147.958486 2017-11-19 08:00:00 2.083699 -1.161645
147.966819 2017-11-19 08:00:00 2.202758 -1.171001
147.975153 2017-11-19 08:00:00 2.367172 -1.163191
147.983486 2017-11-19 08:00:00 2.580872 -1.099003
147.991819 2017-11-19 08:00:00 2.817507 -1.016175
我希望能够引用 lat 和 lon 索引并提取存储在那里的数字。但是,我不知道如何按名称引用它们。
这里问了一个类似的问题,但接受的答案只是让 OP 在索引它时保留列的副本,这对我的情况没有帮助。
解决方案
我认为最简单的是在 select get 之后转换MultiIndex
为列:DataFrame.reset_index
Series
df = df.reset_index()
print (df)
Time lat lon XTIME windspeed direction
0 0 -36.457836 146.200153 2017-10-31 01:00:00 6.299611 0.853234
1 0 -36.457836 146.208487 2017-10-31 01:00:00 6.479416 0.794886
2 0 -36.457836 146.216820 2017-10-31 01:00:00 6.661458 0.736131
3 0 -36.457836 146.225153 2017-10-31 01:00:00 6.511693 0.702716
4 0 -36.457836 146.233487 2017-10-31 01:00:00 6.218874 0.725511
5 463 -37.599502 147.958486 2017-11-19 08:00:00 2.083699 -1.161645
6 463 -37.599502 147.966819 2017-11-19 08:00:00 2.202758 -1.171001
7 463 -37.599502 147.975153 2017-11-19 08:00:00 2.367172 -1.163191
8 463 -37.599502 147.983486 2017-11-19 08:00:00 2.580872 -1.099003
9 463 -37.599502 147.991819 2017-11-19 08:00:00 2.817507 -1.016175
time = df['Time']
lat = df['lat']
lon = df['lon']
print (lon)
0 146.200153
1 146.208487
2 146.216820
3 146.225153
4 146.233487
5 147.958486
6 147.966819
7 147.975153
8 147.983486
9 147.991819
Name: lon, dtype: float64
MultiIndex
或者您可以通过Index.get_level_values
- 在选择获取索引之后选择每个级别:
time = df.index.get_level_values('Time')
lat = df.index.get_level_values('lat')
lon = df.index.get_level_values('lon')
print (lon)
Float64Index([ 146.200153, 146.20848700000002, 146.21681999999998,
146.225153, 146.23348700000003, 147.95848600000002,
147.966819, 147.975153, 147.983486,
147.991819],
dtype='float64', name='lon')
推荐阅读
- python - 一个 docker 容器如何修改另一个 docker 容器的文件?
- swagger - 如何在 OpenAPI 中定义 XML 对象数组?
- python - outReceived from twisted ProcessProtocol 如果接收速度过快会合并消息(缓冲问题?)
- reactjs - 如何解决反应中的条件问题
- ionic-framework - 如何在 Ionic-react 中使用命令生成/添加新页面
- css - 使用 CSS 或 Angular 将滚动默认位置设置为底部
- c# - xamarin 表单:使用 FCM 推送通知。无法从消息中获取数据意图
- java - Java 布尔值返回 do/while
- php - 如何将图像保存在使用 POST ajax 发送的服务器上
- python - 如何获得矩阵中3个元素的最小总和