1

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分钟给我一些指示?谢谢!

4

0 回答 0