python - 在多索引数据集中按名称引用 pandas 索引

标签 python pandas multi-index

我有一个从 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   

我希望能够引用纬度和经度索引并提取存储在那里的数字。但是,我不知道如何按名称引用它们。

提出了类似的问题here但接受的答案只是让OP在索引时保留该列的副本,这对我的情况没有帮助。

最佳答案

我认为最简单的是将 MultiIndex 通过 DataFrame.reset_index 转换为列,选择后获取系列:

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

或者您可以通过Index.get_level_values选择MultiIndex中的每个级别- 选择获取索引后:

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 - 在多索引数据集中按名称引用 pandas 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58850237/

相关文章:

python - CNN 后跟用于签名验证的 RNN 的训练和测试准确性不会增加

python - 使用文档字符串记录 Pythons @property "attributes"

python pandas.Series.str.contains WHOLE WORD

python - 根据列标签 reshape Pandas 中的数据框

python - Pandas - 按大小总和对 Multiindex 进行排序

c++ - boost::multi_index 中的 Sql IN 模拟

python - 关于使用 ttk.Style() 的问题?

python - seaborn 散点图日期时间 x 轴太宽

python - Python Pandas 中的 GroupBy 函数,如 SUM(col_1*col_2)、加权平均值等

python-3.x - 在 Python 中比较和排序列之间的值(使用 "Not Matched"列)