【发布时间】:2020-10-03 10:37:33
【问题描述】:
我有以下数据框(示例):
min max lat lon
16744 1000 1000 60.75 25.75
18738 875 950 64.00 13.75
2811 925 1000 41.00 20.00
12361 1000 1000 54.00 -1.25
19257 1000 1000 64.75 42.00
和数组pressure:
pressure=['1000','975','950','925','900','875','850','825','800','775','750','700','650']
我想根据从min 到max 值的范围使用具有压力水平值的行来扩展数据框。将基于pressure 数组成员进行添加。 IE。如果min、max 是1000、1000,则将添加一个值为975 的新行,所有其他单元格与原始记录相同。
我已经部分解决了这个问题,而不是使用 pandas,现在,由于数据框很大,我遇到了性能问题。
这是我所做的:
mini=sample['min'].to_numpy()
maksi=sample['max'].to_numpy()
for i, ma in enumerate(maksi):
poc=np.where(pressure==ma)
kr=np.where(pressure==mini[i])
if poc[0][0]==0:
pk=0
else:
pk=-1
if kr[0][0]==len(pressure):
kk=0
else:
kk=2
pock=poc[0][0]+pk
kraj=kr[0][0]+kk
pk=0
kk=0
levels=pressure[pock:kraj]
print(levels)
上面代码的打印输出:
[1000 975]
[975 950 925 900 875 850]
[1000 975 950 925 900]
[1000 975]
[1000 975]
我需要做的是将上述数组整合到示例数据帧的记录中。
期望的输出:
pre lat lon
16744 1000 60.75 25.75
16744 975 60.75 25.75
18738 975 64.00 13.75
18738 950 64.00 13.75
18738 900 64.00 13.75
18738 875 64.00 13.75
18738 850 64.00 13.75
2811 1000 41.00 20.00
2811 975 41.00 20.00
2811 950 41.00 20.00
2811 925 41.00 20.00
2811 900 41.00 20.00
12361 1000 54.00 -1.25
12361 975 54.00 -1.25
19257 1000 64.75 42.00
19257 975 64.75 42.00
我可以以矢量方式完成所有这些 - 仅熊猫吗?任何帮助表示赞赏。
【问题讨论】:
-
“如果 min,max 为 1000,1000,新行值为 975”背后的逻辑是什么
-
只是好奇,为什么你的
pressure数组是字符串数组? -
我已经从更大的代码中摘录了工作摘录。
-
@it is Chris 如果两个值都是 1000,我需要将压力扩展到 975。此外,如果 min max 是 875 和 950,我需要将其扩展到压力数组的相邻成员。类似的逻辑适用于所有行。