Python panda 多索引数据框:如何将特定列与新索引中的特定值相关联
我在多索引熊猫数据框中有气象数据。为简单起见,让我们将示例限制为不同压力水平下的温度(您可以将其想象为对应于海拔高度)和降水。目前df有3个索引:纬度、经度和时间。温度值按每个压力级别组织为一列。因此 df 看起来像:
idx1 | idx2 | idx3 | 降水量(mm) | T@1000hPa | 温度@900hPa | T@800hPa …</th> | .. | 温度@10hPa | 评论 |
---|---|---|---|---|---|---|---|---|---|
纬度(度) | 长(度) | 时间(小时) | |||||||
30 | 20 | 0 | 0.0 | 25.1 | 13.7 | 2.1.. | -30.5 | ||
30 | 21 | 0 | 0.1 | 25.0 | 13.6 | 1.8 .. | -30.3 | ||
30 | 22 | 0 | 0.5 | 24.6 | 13.2 | 1.6 .. | -30.4 | ||
30 | 23 | 0 | 1.2 | 22.1 | 13.0 | 1.9 .. | -30.8 | ||
30 | 24 | 0 | 1.7 | 21.9 | 12.8 | 2.1.. | -30.5 | ||
31 | 20 | 0 | 0.9 | 23.3 | 13.1 | 2.2.. | -31.2 | # 下一个纬度 | |
31 | 21 | 0 | 0.2 | 23.7 | 13.1 | 2.0 .. | -30.9 | ||
…</td> | …</td> | …</td> | …</td> | …</td> | …</td> | …</td> | …</td> | …</td> | |
30 | 20 | 1 | 0.2 | 24.7 | 13.8 | 2.3.. | -30.4 | # 下一个时间步 | |
30 | 21 | 1 | 0.8 | 23.6 | 13.7 | 2.0 .. | -30.9 | ||
…</td> | …</td> | …</td> | …</td> | …</td> | …</td> | …</td> | …</td> | …</td> |
我想要实现的是以下几点:
idx1 | idx2 | idx3 | idx4 | 温度(摄氏度) | 评论 |
---|---|---|---|---|---|
纬度(度) | 长(度) | 时间(小时) | 压力等级(hPa) | ||
30.0 | 20.0 | 0 | 1000 | 25.1 | |
30.0 | 21.0 | 0 | 1000 | 25.0 | |
30.0 | 22.0 | 0 | 1000 | 24.6 | |
30.0 | 23.0 | 0 | 1000 | 22.1 | |
30.0 | 24.0 | 0 | 1000 | 21.9 | |
31.0 | 20.0 | 0 | 1000 | 23.3 | |
31.0 | 21.0 | 0 | 1000 | 23.7 | |
…</td> | …</td> | …</td> | …</td> | …</td> | |
30 | 20 | 1 | 1000 | 24.7 | |
30 | 21 | 1 | 1000 | 23.6 | |
…</td> | …</td> | …</td> | …</td> | …</td> | |
39 | 23 | 48 | 1000 | 26.2 | |
39 | 24 | 48 | 1000 | 26.0 | # 最后一个时间步(48小时) |
…</td> | …</td> | …</td> | …</td> | …</td> | |
30.0 | 20.0 | 0 | 900 | 13.7 | 启动 900hPa 压力水平 |
30.0 | 21.0 | 0 | 900 | 13.6 | |
30.0 | 22.0 | 0 | 900 | 13.2 | |
30.0 | 23.0 | 0 | 900 | 13.0 | |
30.0 | 24.0 | 0 | 900 | 12.8 | |
31.0 | 20.0 | 0 | 900 | 13.1 | 下一个纬度 |
31.0 | 21.0 | 0 | 900 | 13.1 | |
…</td> | …</td> | …</td> | …</td> | …</td> | |
30 | 20 | 1 | 900 | 13.8 | 下一个时间步 |
30 | 21 | 1 | 900 | 13.7 | |
…</td> | …</td> | …</td> | …</td> | …</td> | |
39 | 23 | 48 | 900 | 14.0 | |
39 | 24 | 48 | 900 | 14.2 | # 最后一个时间步(48小时) |
…</td> | …</td> | …</td> | …</td> | …</td> | |
30.0 | 20.0 | 0 | 10 | -30.5 | 启动 10hPa 压力水平 |
30.0 | 21.0 | 0 | 10 | - 30.3 | |
…</td> | …</td> | …</td> | …</td> | …</td> | |
39 | 23 | 48 | 10 | -32.4 | |
39 | 24 | 48 | 10 | -32.9 | # 最后一个时间步(48小时) |
…</td> | …</td> | …</td> | …</td> | …</td> |
idx1 | idx2 | idx3 | idx4 | 降水量(mm) | tCloudCover | (+许多其他人) |
---|---|---|---|---|---|---|
纬度(度) | 长(度) | 时间(小时) | 压力等级(hPa) | |||
30.0 | 20.0 | 0 | 9999 | 0.0 | 0.12 | |
30.0 | 21.0 | 0 | 9999 | 0.1 | 0.25 | |
…</td> | …</td> | …</td> | …</td> | …</td> | …</td> | |
39 | 23 | 48 | 9999 | 0.2 | 0.82 | |
39 | 24 | 48 | 9999 | 0.8 | 0.84 | # 最后一个时间步(48小时) |
目前,我可以例如绘制特定压力水平的地理区域的温带,但我无法绘制特定纬度/经度位置的垂直温度曲线,更不用说这种曲线的时间序列了。
如何将所有现有的“T@1000hPa”列值与 1000hPa 的索引、“T@900hPa”列与 900hPa 索引、“T@10hPa”列与 10hPa 索引等相关联?还有其他参数,例如阵风,仅在较低级别可用,但在所有压力级别均不可用。最后,我如何将降水柱(和其他量)与 9999hPa 关联起来(这意味着数据在不同的压力水平下不可用,而只能作为所有水平或地面的总和)?
最初的绊脚石之一是创建索引。尝试将 16 个压力级别作为数据列插入,然后将该数据列转换为索引,但失败并显示:“ValueError:值长度 (16) 与索引长度 (12400) 不匹配”。
我尝试了不同的(繁琐的)方法,但到目前为止还不能让它工作,更不用说以一种优雅的方式了。或者我是否必须创建第二个独立的数据框来实现这一点(说到优雅......)?有没有好主意的人可以抽出2分钟给我一些指示?谢谢!