【问题标题】:Python :how to merge data using for column with partial values pandasPython:如何使用具有部分值熊猫的列合并数据
【发布时间】:2020-12-30 22:15:14
【问题描述】:

有两个带有值的df:

如何仅在 df(列 = 县)与 df1 中考虑大写字母来部分合并数据框

df:

name      age   county

mark      22    York_USA_TXS
stuart    23    kysjk_USA
lewis     22    Monty_KYSJK

df1:

pin   county

2225    USA
2225    USA
2226    KYSJK

预期输出:

name      age   county            pin

mark      22    York_USA_TXS      2225
stuart    23    kysjk_USA         2225
lewis     22    Monty_KYSJK       2226

【问题讨论】:

  • 为什么df第一行和df1行合并pin = 2225?根据您的描述,您应该将 USA_TXS 与 USA 进行比较。
  • 我试图为美国进行部分合并

标签: python python-3.x pandas dataframe merge


【解决方案1】:

series.str.extract:

s = df['county'].str.extract(f"({'|'.join(set(df1['county']))})",expand=False)
df['pin'] = s.map(dict(df1[['county','pin']].drop_duplicates().to_numpy()))

print(df)

     name  age        county   pin
0    mark   22  York_USA_TXS  2225
1  stuart   23     kysjk_USA  2225
2   lewis   22   Monty_KYSJK  2226

【讨论】:

    【解决方案2】:

    假设县在df1 中始终遵循相同的模式(即{something_COUNTY_...},那么可能的解决方案是:

    merged = pandas.merge(df1[['name', 'age']], 
             df2, 
             left_on=df1.county.apply(lambda x: x.split("_")[1]), 
             right_on=df2.county).drop_duplicates()
    merged[['name', 'age', 'county', 'pin']]
    

    这里的“关键”是df1.county.apply(lambda x: x.split("_")[1]),在您将_ 拆分后,您实际上将一个函数应用于county 列以提取第二个元素。请注意,这适用于您提供给我们的数据,但您可能需要根据需要调整函数(例如,如果您实际上想要合并的是 USA_TXS 而不是 USA) .

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多