[英]Expanding pandas dataframe with range of numpy array
我有以下數據框(樣本):
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
陣列成員進行添加。 即,如果min
, max
為1000
, 1000
,則將添加值為975
的新行,所有其他單元格與原始記錄相同。 我已經部分解決了這個問題,而不是使用熊貓,現在,由於大型數據框,我遇到了性能問題。 這是我所做的:
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
我可以以矢量方式完成所有這些 - 僅熊貓嗎? 任何幫助表示贊賞。
讓我們交叉合並和過濾:
(df.assign(min=lambda x: x['min']-25,dummy=1)
.reset_index()
.merge(pd.DataFrame({'pre':pressure, 'dummy':1}).astype(int),
on='dummy')
.loc[lambda x: x['pre'].between(x['min'],x['max'])]
.set_index('index')
.reindex(['pre','lat','lon'], axis=1)
)
輸出:
pre lat lon
index
16744 1000 60.75 25.75
16744 975 60.75 25.75
18738 950 64.00 13.75
18738 925 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.