我有两个数据集:
df5 = pd.DataFrame({"id":[1,2,3,4,5]})
df6 = pd.DataFrame({"ID":[1,2,3,4,5] ,"Name":["Tom","Dick","Harry","Mike","Sam"]})
我想使用apply或lambda apply将df5中的id替换为df6中的实际名称。我尝试过以下方法:
def extract_name2 (x):
name = df6[df6["ID"] == x]["Name"]
return name
df5["id"].apply(extract_name2)
这是我的输出:
Out[120]:
0 1 2 3 4
0 Tom NaN NaN NaN NaN
1 NaN Dick NaN NaN NaN
2 NaN NaN Harry NaN NaN
3 NaN NaN NaN Mike NaN
4 NaN NaN NaN NaN Sam
我也尝试过:
df5["id"].apply(lambda x: df6[df6["ID"] == x]["Name"])
但结果相同
有人可以帮帮我吗?
解决办法:当您说df6[df6["ID"] == x]输出是根据您给出的条件过滤的数据帧时。
您需要指定需要'Name'过滤数据帧列中的第一个单元格值。
这将为您提供所需的结果:
df5['id'].apply(lambda x: df6[df6['ID'] == x]['Name'].iloc[0])
更新:
您也可以不使用而执行此操作apply。用途merge:
pd.merge(df5, df6, how='left', left_on='id', right_on='ID')
OUTPUT:
id ID Name
1 1 Tom
2 2 Dick
3 3 Harry
4 4 Mike
5 5 Sam
三个资料Q群下载不了也转发不了,先放这里Fine_tuning.zipLangChain.zipdata_clear.rar