如何在主DataFrame中添加子集DataFrame的匹配值列
匹配主DataFrame与子集DataFrame并新增匹配列
需求:现有结构不匹配的两个DataFrame,其中一个是另一个的子集(分别称为主DataFramedfa、子集DataFramedfs),需以两表的Col2列为匹配键,在dfa中新增一列——匹配到的填入对应Col2值,未匹配到的显示NaN。
示例数据
主DataFrame(dfa)
Col1 Col2 1 0,01 2 0.002 3 0.02 4 0.003 5 0.004 6 0.005 7 0.008
子集DataFrame(dfs)
Col1 Col2 1 0,01 2 0.002 3 0.02 4 0.004
预期输出
Col1 Col2 Col2 1 0,01 0,01 2 0.002 0.002 3 0.02 0.02 4 0.003 NaN 5 0.004 0.004 6 0.005 NaN 7 0.008 NaN
实现方式
方式1:用merge左连接
以Col2为键做左连接,自动保留dfa所有行,未匹配项填充NaN:
import pandas as pd # 假设dfa、dfs已初始化 result = dfa.merge(dfs[['Col2']], on='Col2', how='left', suffixes=('', '_match')) # 若要让新增列名与示例一致(同为Col2),可重命名列 result = result.rename(columns={'Col2_match': 'Col2'}) print(result)
方式2:用isin结合where
直接判断dfa的Col2值是否存在于dfs的Col2中,匹配失败则赋值NaN:
import pandas as pd # 新增列并赋值,匹配成功保留原值,失败填NaN dfa['Col2_new'] = dfa['Col2'].where(dfa['Col2'].isin(dfs['Col2']), pd.NA) # 若需和示例列名一致,执行重命名 dfa = dfa.rename(columns={'Col2_new': 'Col2'})
注:示例中新增列与原列同名,实际建议使用不同名称(如Col2_match)避免混淆,若业务要求必须同名,可按上述代码处理。
内容的提问来源于stack exchange,提问作者Pelinsu Ekmekci
相关产品推荐
相关产品推荐

