Python 使用来自df1的值从df2检索值,其中df2列和索引包含一系列值
我有一个数据框,其中包含员工信息,如姓名、绩效系数1和绩效系数2Python 使用来自df1的值从df2检索值,其中df2列和索引包含一系列值,python,pandas,dataframe,lookup,Python,Pandas,Dataframe,Lookup,我有一个数据框,其中包含员工信息,如姓名、绩效系数1和绩效系数2 Name pf1 pf2 pay Adam 14.6 8.9 200 Bob 13.2 9 400 Charlie 11.1 9.1 700 Dylan 14.6 9
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
我还有另一个数据框,我根据性能系数1和性能系数2获得报酬
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
df1
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
df2
数据帧2的行是性能因数,列是性能因数
pf1 8.8-8.9 9.0-9.2 9.3-9.4 9.5-9.6 9.7-10
11.1 to 14 100 200 300 400 500
8.1 to 11 200 300 400 500 600
6.1 to 8 300 400 500 600 700
below 6 400 500 600 700 800
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
我想做的是在df1中添加第三列pay,如以下所示,如果p3高于70:
df1
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
在我之前的帖子中,我尝试了将14,13.9--0.1,0作为pf1索引和
列出8.8、8.9--10,然后使用查找匹配精确的pf1和pf2值。但是,如果df2发生变化,则这不适合长期使用,因为在这种情况下,将有大量的手动工作与df2的大多数值的变化有关
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
这是我尝试在精确值匹配查找方法中使用的代码:
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
df_outer.reset_index(inplace=True)
df3 = indiv.rename(index= lambda x: int(x * 10),
columns= lambda x: int(float(x) * 10))
out= []
for row, col in zip(df_outer['TTR'].mul(10).astype(int), df_outer['CSAT (NSE)'].mul(10).astype(int)):
try:
out.append(df3.at[row, col] )
except KeyError:
out.append(np.nan)
df_outer['Pay'] = out
df_outer.loc[df_outer['# of Closed SRs']>=70, 'Pay_new'] = df_outer['Pay']
print (df_outer)
编辑:
最后,我得到了下面的输出。但是它使用的是df2(旧的),我想使用df2(新的)来获得我的输出
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
Name pf1 pf2 pf3 Pay
0 Adam 14.6 8.9 59 NaN
1 Bob 13.2 9.0 75 400
2 Charlie 11.1 9.1 89 700
3 Dylan 14.6 9.0 97 300
4 Eric 11.1 8.8 105 400
5 Fedderick 12.5 9.2 69 NaN
以前,我的df2(旧)是这样的
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
pf1 8.8 8.9 9 9.1 9.2
14.6 100 200 300 400 500
13.2 200 300 400 500 600
12.5 300 400 500 600 700
11.1 400 500 600 700 800
pf1 8.8-8.9 9.0-9.2 9.3-9.4 9.5-9.6 9.7-10
11.1 to 14 100 200 300 400 500
8.1 to 11 200 300 400 500 600
6.1 to 8 300 400 500 600 700
below 6 400 500 600 700 800
现在我希望我的df2(新)是这样的
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
pf1 8.8 8.9 9 9.1 9.2
14.6 100 200 300 400 500
13.2 200 300 400 500 600
12.5 300 400 500 600 700
11.1 400 500 600 700 800
pf1 8.8-8.9 9.0-9.2 9.3-9.4 9.5-9.6 9.7-10
11.1 to 14 100 200 300 400 500
8.1 to 11 200 300 400 500 600
6.1 to 8 300 400 500 600 700
below 6 400 500 600 700 800
编辑2:
我的df 2在csv中如下所示:
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
这里可以通过在列中创建
IntervalIndex
并在df2
DataFrame中创建索引,然后使用以下命令更改查找:
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
第一次测试:
Name pf1 pf2 pay
Adam 14.6 8.9 200
Bob 13.2 9 400
Charlie 11.1 9.1 700
Dylan 14.6 9 300
Eric 11.1 8.8 400
Fedderick 12.5 9.2 700
print (df2.columns)
Index(['8.8-8.9', '9.0-9.2', '9.3-9.4', '9.5-9.6', '9.7-10'], dtype='object')
print (df2.index)
Index(['11.1 to 14', '8.1 to 11', '6.1 to 8', 'below 6'], dtype='object', name='pf1')
你的意思是你已经有了
Pay
列,你想在pf3>=70
的基础上添加一个Pay\u新的列吗?我编辑了它。希望您现在能够理解我从元组(i,closed='both')到df2.index=pd.IntervalIndex.fromerror@ShafeekShaik-数据是保密的?是的。很抱歉。也许我可以替换一些东西?@ShafeekShaik-好的,在真实数据中返回什么I
?我将如何检查?我对python还比较陌生,可以稍微理解一下。然而,问题似乎在于df2.columns.str.split('-')中x的c=[(float(x[0]),float(x[1])]