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

如何为Pandas DataFrame添加长度不同的列?无需循环实现

高效实现Pandas按共同列匹配添加新列(无需循环)

当然有比循环高效得多的实现方式!Pandas内置了一系列向量化操作的函数,完全可以轻松搞定这个需求,代码简洁还跑得快,尤其适合处理大规模数据。

先还原示例中的数据:

import pandas as pd

# 主DataFrame
main_df = pd.DataFrame({
    'index_column': [1, 2, 3, 4],
    'date': [1, 2, 3, 4],
    'value': ['A', 'B', 'C', 'D']
})

# 待添加的新列数据
new_data = pd.DataFrame({
    'date': [2, 3],
    'value': ['G', 'J']
})

方法一:用reindex快速匹配填充

这是最简洁的方式,核心思路是把新数据转换成以date为索引的Series,再用主DataFrame的date列重新索引,缺失值直接填充0:

# 将新数据转为以date为索引的Series
new_value_series = new_data.set_index('date')['value']

# 匹配主df的date列,缺失值填0,添加为新列
main_df['new value'] = new_value_series.reindex(main_df['date'], fill_value=0)

执行后就能得到你期望的结果:

index_columndatevaluenew value
11A0
22BG
33CJ
44D0

方法二:用merge左连接+填充缺失值

如果你更习惯用合并的思路,也可以用左连接实现,之后把缺失的匹配值填充为0:

# 左连接主df和新数据,基于date列,区分重复列名
merged_result = pd.merge(
    main_df,
    new_data,
    on='date',
    how='left',
    suffixes=('', '_new')  # 给新数据的value列加后缀
)

# 填充缺失值为0,并重命名新列
merged_result['new value'] = merged_result['value_new'].fillna(0)
# 移除临时生成的value_new列
merged_result = merged_result.drop('value_new', axis=1)

为什么这两种方法比循环好?

Pandas的这些内置函数都是向量化操作,底层用C语言实现,比Python循环快几个数量级——数据量越大,优势越明显。而且代码可读性更强,维护起来也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:40:25