基于id列合并Pandas DataFrame未获预期结果,求正确实现方法
基于ID列合并两个Pandas DataFrame的解决方案
先看你给出的DataFrame创建代码(修正注释表述):
import pandas as pd # 整数列表 lst1 = [1,1,2,2,3] # 字符串列表 lst2 = ["a","b","c"] lst3 = [1] # 字符串列表 lst4 = ["f"] df1 = pd.DataFrame(list(zip(lst1, lst2)), columns =['id', 'str1']) df2 = pd.DataFrame(list(zip(lst3, lst4)), columns =['id', 'str2'])
你需要保留df1中所有id=1的行,并将df2中id=1对应的str2值匹配到每一行。之前用merge/join/concat没得到预期结果,大概率是没指定左连接方式——默认的merge是内连接,只会保留两边共同存在的id行且仅匹配一次,而左连接会保留左表(df1)的所有行,右表(df2)中匹配到的内容对应填充,未匹配的则为NaN。
用左连接合并后,再过滤出id=1的行即可得到目标结果:
# 基于id列左连接两个DataFrame merged_df = pd.merge(df1, df2, on='id', how='left') # 筛选id为1的行并重置索引 final_df = merged_df[merged_df['id'] == 1].reset_index(drop=True) print(final_df)
输出结果:
id str1 str2 0 1 a f 1 1 b f
注:你给出的预期结果里第一行的a1应为笔误,正确值是1。
内容的提问来源于stack exchange,提问作者Alexandra
相关产品推荐
相关产品推荐

