根据另一个数据框数据生成列数据

时间:2019-10-27 20:35:09

标签: python pandas numpy

我有一个数据框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')

任何人都可以告诉我我在做错什么,还是有其他方法可以做到这一点。

1 个答案:

答案 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)