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

合并不等长时间序列DataFrame并拼接列表值避免NaN的解决方案

合并列表值型时间序列DataFrame的解决方案

你可以直接使用Pandas的add方法,通过fill_value参数指定缺失值填充为空列表,即可避免非重叠日期出现NaN的问题。

代码示例

import pandas as pd

# 示例数据构造
df1 = pd.DataFrame(
    {"val": [["AAA", "BBB"], ["CCC"], ["DDD"]]},
    index=pd.to_datetime(["2021-09-16", "2021-09-17", "2021-09-18"])
)
df2 = pd.DataFrame(
    {"val": [["EEE"], ["FFF"], [], ["GGG"], ["HHH", "III"]]},
    index=pd.to_datetime(["2021-09-16", "2021-09-17", "2021-09-18", "2021-09-19", "2021-09-20"])
)

# 核心合并逻辑
merged_df = df1.add(df2, fill_value=[])

运行结果

执行后得到的merged_df完全符合预期:

日期val
2021-09-16[AAA, BBB, EEE]
2021-09-17[CCC, FFF]
2021-09-18[DDD]
2021-09-19[GGG]
2021-09-20[HHH, III]

实现原理

  • 直接使用+运算符相加时,Pandas会自动将两个DataFrame非重叠索引的位置填充为NaN,NaN与列表相加结果仍为NaN
  • 用add方法的fill_value参数指定填充值为[]后,非重叠位置的缺失值会被替换为空列表,与原列表相加后直接保留原列表内容,重叠位置的两个列表正常拼接。

注意事项

  • 如果两个DataFrame的列名不同,需要先将存储列表的列名统一,或单独提取对应列做合并操作:
    merged_series = df1['列名1'].add(df2['列名2'], fill_value=[])
    
  • 确保所有待合并的字段值均为列表类型,避免类型不匹配报错
  • 低版本Pandas如果不支持fill_value传入列表,可以使用对齐索引的兼容写法:
    df1_aligned, df2_aligned = df1.align(df2, fill_value=[])
    merged_df = df1_aligned + df2_aligned
    

内容的提问来源于stack exchange,提问作者Drive2blue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:27:03