Python 如何创建一个新的DF,其中最后一列乘以3/2过滤另一个DF';s ID#?
我有两个DF,一个是 DF1 另一个DF只有IDnum,其中标题被城市和奖金打破(谁得到3/2x)***在这种情况下,只有Sam你得到3/2x奖金加上IDnum 134的员工,他们在某处打破了我的前3行 DF2Python 如何创建一个新的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 我们的目标是拥有这样的东西。我非
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