Pandas:使用多列的函数

时间:2018-01-09 20:01:56

标签: python pandas

我的数据框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中某一行的scoredf1,我需要从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

1 个答案:

答案 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