Python 如何创建一个新的DF,其中最后一列乘以3/2过滤另一个DF';s ID#?

Python 如何创建一个新的DF,其中最后一列乘以3/2过滤另一个DF';s ID#?,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,我有两个DF,一个是 DF1 另一个DF只有IDnum,其中标题被城市和奖金打破(谁得到3/2x)***在这种情况下,只有Sam你得到3/2x奖金加上IDnum 134的员工,他们在某处打破了我的前3行 DF2 NYC LA SF Bonus 0 542 451 421 556 1 745 345 367 134 我的目标是有一个新的DF,它在D2中使用工资DF1和ID Num 获得一个新的DF3 我们的目标是拥有这样的东西。我非

我有两个DF,一个是

DF1

另一个DF只有IDnum,其中标题被城市和奖金打破(谁得到3/2x)***在这种情况下,只有Sam你得到3/2x奖金加上IDnum 134的员工,他们在某处打破了我的前3行

DF2

   NYC   LA    SF   Bonus
0  542   451  421   556          
1  745   345  367   134
我的目标是有一个新的DF,它在D2中使用工资DF1和ID Num

获得一个新的DF3

我们的目标是拥有这样的东西。我非常希望避免将其添加到第一个DF中,因为这样会产生重复和日期冲突等问题

 Name          IDnum    Age   City  Bonus
 Mike Thanks    542      52    NYC  52000
 Bob  Jame      451      21    LA   15000
 Sam  You       556      21    SF   108000
与一起使用以检查值是否存在于另一个df的列中,如果存在则执行X,如果不存在则执行Y

方法1:作为列添加到现有df,然后将其移动到新df

df1['Adj_Salary']= np.where(df1['IDnum'].isin(df2['Bonus']),df1['Salary']*1.5,df1['Salary'] )
df3=df1.join(pd.DataFrame(df1.pop('Adj_Salary').values.tolist(),index=df1.index))
df3.drop('Salary', axis=1,inplace=True)
df3.rename(columns={0:'Bonus'},inplace=True)
方法2:使用
concat()

与一起使用以检查值是否存在于另一个df的列中,如果存在则执行X,如果不存在则执行Y

方法1:作为列添加到现有df,然后将其移动到新df

df1['Adj_Salary']= np.where(df1['IDnum'].isin(df2['Bonus']),df1['Salary']*1.5,df1['Salary'] )
df3=df1.join(pd.DataFrame(df1.pop('Adj_Salary').values.tolist(),index=df1.index))
df3.drop('Salary', axis=1,inplace=True)
df3.rename(columns={0:'Bonus'},inplace=True)
方法2:使用
concat()


只需从奖金df(df2)中使用所需的
IDs
,并用它过滤工资df(df1)

然后,你只需在基本工资基础上乘以奖金百分比(顺便说一句,这是非常慷慨的,我可以在你工作的地方申请吗?JK):

为此,请使用
isin()

瞧,这就是你想要的数据帧


希望这有帮助:)

只需使用奖金df(df2)中所需的
ID,并用它过滤工资df(df1)

然后,你只需在基本工资基础上乘以奖金百分比(顺便说一句,这是非常慷慨的,我可以在你工作的地方申请吗?JK):

为此,请使用
isin()

瞧,这就是你想要的数据帧


希望这有帮助:)

检查更新的代码。这将为您提供所需的检查更新的代码。这会给你你所需要的
a=pd.Series(np.where(df1['IDnum'].isin(df2['Bonus']),df1['Salary']*1.5,df1['Salary']))
df3=pd.concat((df1.loc[:, df1.columns != 'Salary'],a.rename('Bonus')),axis=1, join='inner')
Name         IDnum      Age     City    Bonus
Mike Thanks     542     52      NYC     52000.0
Bob Very        451     21      LA      15000.0
Sam You         556     21      SF      108000.0
df3 = df1[df1['IDnum'].isin(df2['Bonus'].values.tolist())]      # just get the employees in df1 whose ids exist in df2
df3.reset_index(inplace = True, drop = True)                    # You need to reset the index, since we are updating columns, if you don't update it you would perform update on a slice of dataframe which tends to give warning, we don't want warning now do we? :D
df3['Bonus'] = df3['Salary']*(3/2)                              # Create the bonus field
del df3['Salary']                                               # Delete the salary field if you don't want it in your final df