Python Pandas-pd.merge,添加检查以确保列不';不存在?

Python Pandas-pd.merge,添加检查以确保列不';不存在?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,一个是我使用的主数据帧,另一个是我想从中引入信息的辅助数据帧 df1(main)包含一个带有各种名称字符串的报告器列 df2(附加信息)包含报告者姓名及其位置 我想在df1中将location列添加为新列 我可以一次性完成以下工作: df1 = pd.merge(df1, df2, on='Reporter', how='left') 而且有效。 我的问题是我运行一个频繁更新的脚本(检查新行和检查旧行上的更新),并且重复运行这行代码会为每次执行添加多个列 仅检查列是否存在的问

我有两个数据帧,一个是我使用的主数据帧,另一个是我想从中引入信息的辅助数据帧

df1
(main)包含一个带有各种名称字符串的报告器列

df2
(附加信息)包含报告者姓名及其位置

我想在
df1
中将location列添加为新列

我可以一次性完成以下工作:

df1 = pd.merge(df1, df2, on='Reporter', how='left')
而且有效。

我的问题是我运行一个频繁更新的脚本(检查新行和检查旧行上的更新),并且重复运行这行代码会为每次执行添加多个列

  • 仅检查列是否存在的问题是,可能已将新行(包含新报告器名称)添加到df中,我确实希望知道/更新其位置

  • 我这样做对吗?或者我应该做一些dict查找,每次都有条件地映射位置吗?我怎样才能在熊猫身上做到这一点


    • pd.merge的问题在于它总是在结果中添加后缀

      不要使用它。

      使用等效的
      DataFrame.join
      DataFrame.merge
      对正在进行左连接的数据帧进行合并

      df1 = df1.join(df2, on='Reporter', how='left')
      
      或者


      公共列在结果中只保留一次。但是,这两个列之间的其他相同列(如果有)是重复的(带有后缀)

      感谢您提供的信息coldspeed,但我选择了第二个选项,映射dict

      reporter_dict = dict(zip(df2['Reporter'].astype(str),df2['Reporter Location']))
      df['Reporter Location'] = df['Reporter'].astype(str).map(reporter_dict)
      

      对于单个系列,我通常更喜欢映射一个系列,而不是
      merge
      join
      (如果使用正确,这两个选项也是有效的)

      注意:我假设您已经将
      str
      转换应用于所有列

      s = df2.set_index('Reporter')['Reporter Location']
      
      df['Reporter Location'] = df['Reporter'].map(s)
      
      通常,不需要将序列转换为
      dict
      ,也不需要在
      pd.series
      对象上使用
      zip
      。使用
      zip
      numpy
      数组

      s = df2.set_index('Reporter')['Reporter Location']
      
      df['Reporter Location'] = df['Reporter'].map(s)