You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas对比两个序列列并插入元素实现DataFrame序列匹配

两个Pandas序列对齐插空的实现方案

你现有代码的核心问题是遍历原DataFrame的固定索引,过程中修改列长度会导致索引错位,且Pandas的Series拼接逻辑不能用普通列表的+直接添加单个NaN值,因此无法达到预期效果。

实现思路

采用双指针法遍历两个序列的非空元素,匹配时同步写入两个结果列,不匹配时为滞后序列补空值,最后将结果转为新的DataFrame即可。

完整代码

import pandas as pd
import numpy as np

# 替换为你的原始DataFrame
df = pd.DataFrame({
    'column A': [1,3,5,7],
    'column B': [1,2,4,5,8]
})

# 提取两列的非空值列表
list_a = df['column A'].dropna().tolist()
list_b = df['column B'].dropna().tolist()

i = j = 0
res_a, res_b = [], []

# 双指针遍历对齐
while i < len(list_a) and j < len(list_b):
    if list_a[i] == list_b[j]:
        res_a.append(list_a[i])
        res_b.append(list_b[j])
        i += 1
        j += 1
    elif list_a[i] < list_b[j]:
        res_a.append(list_a[i])
        res_b.append(np.nan)
        i += 1
    else:
        res_a.append(np.nan)
        res_b.append(list_b[j])
        j += 1

# 处理剩余未遍历的元素
while i < len(list_a):
    res_a.append(list_a[i])
    res_b.append(np.nan)
    i += 1
while j < len(list_b):
    res_a.append(np.nan)
    res_b.append(list_b[j])
    j += 1

# 生成最终结果
result_df = pd.DataFrame({
    'column A': res_a,
    'column B': res_b
})

输出效果(对应测试用例)

column Acolumn B
11
NaN2
3NaN
NaN4
55
7NaN
NaN8

如果你的序列无需按数值大小排序,仅按元素出现顺序匹配,修改双指针的判断逻辑即可适配。

内容的提问来源于stack exchange,提问作者Jorge Enrique Gamboa Fuentes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 20:33:01