熊猫根据从第二个到第一个的匹配列值将一个DF的列值映射到另一个

时间:2020-08-14 18:50:04

标签: python pandas dataframe csv

我有两个CSV文件,即doctors.csv和clinics.csv,在clinics.csv中有cols Clinic_ID和Clinic_Name,然后我需要在Doctors.csv中添加新列以添加Clinic_ID,其中来自医生的Clinic_Name .csv与climates.csv中的Clinic_Name相匹配。

clinics.csv
Clinic_ID   Clinic_Name
1           Clinic 1
2           Clinic 2
3           Clinic 3
4           Clinic 4

doctors.csv
Clinic_ID   Clinic_Name
add ID      Clinic 1
add ID      Clinic 2
add ID      Clinic 3
add ID      Clinic 4

如果您能为我指明从这里出发的正确方向,因为我不确定这是否涉及根据诊所名称将df1映射到df2,然后根据此名称填充ID。

2 个答案:

答案 0 :(得分:2)

尝试使用merge()函数。

这是解决您问题的代码:

clinics = pd.DataFrame({'Clinic_ID': [1, 2, 3, 4], 'Clinic_Name':['Clinic 1','Clinic 2','Clinic 3','Clinic 4'] })    
doctors = pd.DataFrame({'Clinic_Name': ['Clinic 1','Clinic 2','Clinic 3','Clinic 4']})
  

clinics_final=clinics.merge(doctors, on='Clinic_Name')

输出:

   Clinic_ID Clinic_Name
0          1    Clinic 1
1          2    Clinic 2
2          3    Clinic 3
3          4    Clinic 4

您可以在pandas.DataFrame.merge上了解有关merge()功能的更多信息

答案 1 :(得分:1)

尝试assign

print(df_doctor.assign(Clinic_ID=lambda x: [df_clinic['Clinic_ID'][key] for key, value in df_clinic['Clinic_Name'].items() if value == df_doctor['Clinic_Name'][key]]))

或者您可以直接分配,这更快。

df_doctor['Clinic_ID'] = [df_clinic['Clinic_ID'][key] for key, value in df_clinic['Clinic_Name'].items() if value == df_doctor['Clinic_Name'][key]]
print(df_doctor)

输出:

  Clinic_Name  Clinic_ID
0    Clinic 1          1
1    Clinic 2          2
2    Clinic 3          3
3    Clinic 4          4