[英]Retrieve closest value from another dataframe in pandas for each row
我所在位置的空氣質量為 dataframe,如下所示:
編號 | 類型 | 價值 |
---|---|---|
0 | 空氣 | 好的 |
1 | 合作 | 181.91 |
2 | 不 | 4.58 |
3 | 2號 | 11.48 |
4 | o3 | 33.62 |
5 | so2 | 0.22 |
6 | NH3 | 5.45 |
7 | pm2_5 | 6.13 |
8 | 下午10點 | 8.99 |
我有另一個 dataframe,其中一些組件的閾值(值是上限)
編號 | 類型 | 好的 | 公平的 | 緩和 | 較差的 | 很窮 |
---|---|---|---|---|---|---|
0 | 2號 | 50 | 100 | 200 | 400 | 401 |
1 | 下午10點 | 25 | 50 | 90 | 180 | 181 |
2 | o3 | 60 | 120 | 180 | 240 | 241 |
3 | pm2_5 | 15 | 30 | 55 | 110 | 111 |
我想在空氣質量 dataframe 中添加一個新列,它會告訴我當前值是否為“良好”、“一般”、“中等”等,但我正在努力解決如何更好地解決這個問題。
預期的 output 尚不清楚,但您需要的兩個關鍵步驟是melt
以重塑分數的 DataFrame 和merge_asof
以按最接近的值合並:
(pd
.merge_asof(df1.assign(New=pd.to_numeric(df1['Value'], errors='coerce'))
.fillna(0).sort_values(by='New'),
df2.melt('type', value_name='New', var_name='Score')
.astype({'New': float})
.sort_values(by='New'),
left_by='Type', right_by='type', on='New',
direction='forward',
)
)
一旦你有了這個,你就可以修改列,填充 NaN 等等。
output:
Type Value New type Score
0 air Good 0.00 NaN NaN
1 so2 0.22 0.22 NaN NaN
2 no 4.58 4.58 NaN NaN
3 nh3 5.45 5.45 NaN NaN
4 pm2_5 6.13 6.13 pm2_5 Good
5 pm10 8.99 8.99 pm10 Good
6 no2 11.48 11.48 no2 Good
7 o3 33.62 33.62 o3 Good
8 co 181.91 181.91 NaN NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.