簡體   English   中英

在 pandas 中為每一行從另一個 dataframe 檢索最接近的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM