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
谢谢你的帮助!你的方法确实比我想象的要好得多感谢这个解决方案!