Python 在dataframe列上应用函数时出现问题

Python 在dataframe列上应用函数时出现问题,python,pandas,dataframe,apply,Python,Pandas,Dataframe,Apply,我有两个数据帧: df = pd.DataFrame({'Points' : ['A','B','C','D','E'],'ColY' : [1,2,3,4,5]}) df Points ColY 0 A 1 1 B 2 2 C 3 3 D 4 4 E 5 df2 = pd.DataFrame({'Points' : ['A','D'],'ColX' : [2,9]}) df

我有两个数据帧:

df = pd.DataFrame({'Points' : ['A','B','C','D','E'],'ColY' : [1,2,3,4,5]})
df
    Points  ColY
0       A      1
1       B      2
2       C      3
3       D      4
4       E      5

df2 = pd.DataFrame({'Points' : ['A','D'],'ColX' : [2,9]})
df2
    Points  ColX
0       A      2
1       D      9
这两个功能是:

# equivalent of the Excel vlookup function applied to a dataframe
def vlookup(df,ref,col_ref,col_goal):
    return pd.DataFrame(df[df.apply(lambda x: ref == x[col_ref],axis=1)][col_goal]).iloc[0,0]

# if x is in column Points of df2, return what is in column ColX in the same row
def update_if_belong_to_df2(x):
    if x in df2['Points']:
        return vlookup(df2,x,'Points','ColX')
    return x
我想将函数update_(如果_属于_df2)应用于df的ColY列。我尝试了以下方法,但无效:

df['ColY'] = df['ColY'].apply(lambda x : update_if_belong_to_df2(x))
我想得到:

df
    Points  ColY
0       A      2
1       B      2
2       C      3
3       D      9
4       E      5
你能帮我弄明白为什么吗?
谢谢IIUC,使用
map
fillna
您的问题会更简单:

df['ColY'] = (df['Points'].map(df2.set_index('Points')['ColX'])
                   .fillna(df['ColY'])
              )
输出:

  Points  ColY
0      A   2.0
1      B   2.0
2      C   3.0
3      D   9.0
4      E   5.0

改用熊猫
更新

df=pd.DataFrame({'Points':['A','B','C','D','E','ColY':[1,2,3,4,5]})
df2=pd.DataFrame({'Points':['A','D'],'ColX':[2,9]})
df=df.set_索引('点')
update(df2.set_index('Points').rename(columns={'ColX':'ColY'}))
df.reset_index()
科利点
0 A 2.0
1 B 2.0
2c3.0
三维9.0
4 E 5.0

我将执行
合并

df=df.merge(df2,how='left')
df.ColX=df.ColX.fillna(df.ColY)
df
  Points  ColY  ColX
0      A     1   2.0
1      B     2   2.0
2      C     3   3.0
3      D     4   9.0
4      E     5   5.0

谢谢你的帮助!你的方法确实比我想象的要好得多感谢这个解决方案!