【问题标题】:Pandas Map column values from one DF to another based on matching column values from the second to the first [duplicate]Pandas 根据从第二个到第一个的匹配列值将列值从一个 DF 映射到另一个 [重复]
【发布时间】:2020-08-14 18:50:04
【问题描述】:

我有两个 CSV 文件,dorst.csv 和clinics.csv,在clinics.csv 中有cols Clinic_ID 和Clinic_Name,然后我需要在医生.csv 中添加一个新列,以将Clinic_ID 添加到医生的Clinic_Name 中.csv 匹配 Clinics.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。

【问题讨论】:

  • 如果有任何对您有帮助的答案,请选择它以关闭问题。

标签: python pandas dataframe csv


【解决方案1】:

尝试使用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() 功能的更多信息

【讨论】:

    【解决方案2】:

    试试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
    

    【讨论】:

      猜你喜欢
      • 2022-12-03
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多