Python:如何使用for列合并数据和部分值

2024-09-30 10:37:37 发布

您现在位置:Python中文网/ 问答频道 /正文

有两个df值:

如何将df(column=county)中仅考虑大写字母的数据帧与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

Tags: namedfagepindf1markyorkcounty
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

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

相关问题 更多 >

    热门问题