我的数据框df1:
date, country, category, score, value
2017-01-01, US, 123, 555, 232.02
2017-01-01, US, 223, 10, 22.02
我有一个查找数据帧df2:
category, factor_score_0_100, factor_score_101_500, factor_score_501_1000
123, 2.0, 3.0, 4.0
223, 5.4, 4.3, 3.2
根据category
中某一行的score
和df1
,我需要从df2获取factor_score
。如果特定类别的df1
得分在0到100之间,我需要为该类别返回factor_score_0_100
,依此类推。
到目前为止,我已经能够将df2
转换为格式
category: [factor_score_0_100, factor_score_101_500, factor_score_501_1000]
我正在尝试编写一个函数,然后通过lambda编写apply
,但我不确定如何使用2列作为输入。
我该怎么办? TIA
答案 0 :(得分:0)
使用IntervalIndex
+ lookup
df2=df2.set_index('category')
df2.columns=df2.columns.str.split('_',expand=True)
idx=pd.IntervalIndex.from_arrays(df2.columns.get_level_values(2).astype(int),df2.columns.get_level_values(3).astype(int),closed='both')
df2.columns=idx
df2.lookup(df1[' category'],df1[' score'])
Out[171]: array([4. , 5.4])
分配后
df1['NEW']=df2.lookup(df1[' category'],df1[' score'])
df1
Out[173]:
date country category score value NEW
0 2017-01-01 US 123 555 232.02 4.0
1 2017-01-01 US 223 10 22.02 5.4