pandas合并两个独立DataFrame列 保留全部值非匹配值填充缺失标识
操作错误原因
pd.concat 仅会按照两个 DataFrame 的行索引做对齐拼接,不会根据两列的实际取值做匹配。你当前使用的两个测试数据集行索引均为默认的自增整数,拼接时只会把左表第0行和右表第0行拼接、左表第1行和右表第1行拼接,自然会出现取值错位的问题,完全达不到按id值匹配的效果。
正确实现方法
你需要的效果等价于两个列的全外连接,使用pd.merge即可实现,示例代码如下:
import pandas as pd # 你的测试数据 first = pd.DataFrame({"id1": ["K0","K4"]}) second = pd.DataFrame({"id2": ["K0", "K2", "K3"], "v": [4, 6,3]}) # 执行全外连接,按id值匹配 res = pd.merge( left=first, right=second[["id2"]], # 只取需要的id2列 how="outer", # 全外连接,保留左右所有取值 left_on="id1", # 左表匹配键 right_on="id2" # 右表匹配键 ) # 可选:将空值替换为指定标识Not found res = res.fillna("Not found")
执行上述代码后输出的结果和你要求的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

