我有一个数据框df1,它具有:
F_ID I_Code F_Date
1 FT-54185 01/09/2019
2 FT-35447 01/09/2019
3 FT-39312 01/09/2019
4 FT-21146 01/09/2019
5 FT-40664 01/09/2019
1 FT-56984 02/09/2019
2 FT-19680 02/09/2019
3 FT-89801 02/09/2019
4 FT-29238 02/09/2019
5 FT-45919 02/09/2019
1 FT-97960 03/09/2019
2 FT-76736 03/09/2019
3 FT-73886 03/09/2019
4 FT-70293 03/09/2019
5 FT-72250 03/09/2019
我还有另一个数据框df2,它具有以下条目:
F_Date ID_code
01/09/2019 5
01/09/2019 5
01/09/2019 5
01/09/2019 5
01/09/2019 2
01/09/2019 2
01/09/2019 2
01/09/2019 2
我想生成一个新列'ID',该列将从df1中提取并插入到df2中
预期输出:
F_Date ID_code ID
01/09/2019 5 FT-40664
01/09/2019 5 FT-40664
01/09/2019 5 FT-40664
01/09/2019 5 FT-40664
01/09/2019 2 FT-35447
01/09/2019 2 FT-35447
01/09/2019 2 FT-35447
01/09/2019 2 FT-35447
如果ID_code中没有值(“ NA”或0),则需要在该列中填写“ NA”。
我正在尝试使用来实现相同的目的:
d = df1.groupby('F_Date')['I_Code'].apply(list).to_dict()
df2['new'] = df2.apply(lambda x: d.get(x['F_Date'], [])[x['ID_Code']], axis=1)
我遇到以下错误:
TypeError :(“列表索引必须是整数或切片,而不是浮点数”, '发生在索引0')
任何人都可以告诉我我在做错什么,还是有其他方法可以做到这一点。
答案 0 :(得分:1)
尝试:
df2.merge(df1, left_on = ['ID_code','F_Date'], right_on = ['F_ID','F_Date'], how = 'left').rename(columns={"I_Code": "ID"}).fillna('NA').drop('F_ID', axis = 1)