在python pandas中基于df值比较创建派生字段

yuz*_*uzu 5 calculated-columns dataframe python-3.x pandas

我有 2 个数据帧 - 一个是数据源数据帧,另一个是参考数据帧。我想根据这两个数据帧的比较在 df1 中创建一个附加列

df1 - 数据源

No | Name
213344 | Apple
242342 | Orange
234234 | Pineapple

Run Code Online (Sandbox Code Playgroud)

df2 - 参考表

RGE_FROM | RGE_TO | Value
2100 | 2190 | Sweet
2200 | 2322 | Bitter
2400 | 5000 | Neutral
Run Code Online (Sandbox Code Playgroud)

最后,如果 df1.No 的前 4 个字符落在 df2.RGE_FROM 到 df2.RGE_TO 的范围内,则获取派生列 df.DESC 的 df2.Value。否则,空白

No | Name | DESC
213344 | Apple | Sweet
242342 | Orange | Natural
234234 | Pineapple | 

Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!谢谢!

Shu*_*rma 7

我们可以IntervalIndex从列RGE_FROM和创建一个RGE_TO,然后将其设置为列的索引Value以创建映射系列,然后切片列中的前四个字符No并使用Series.map来自映射系列的值替换。

i =  pd.IntervalIndex.from_arrays(df2['RGE_FROM'], df2['RGE_TO'], closed='both')
df1['Value'] = df1['No'].astype(str).str[:4].astype(int).map(df2.set_index(i)['Value'])
Run Code Online (Sandbox Code Playgroud)
       No       Name    Value
0  213344      Apple    Sweet
1  242342     Orange  Neutral
2  234234  Pineapple      NaN
Run Code Online (Sandbox Code Playgroud)