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

如何按列表长度条件合并同列同索引的DataFrame并更新列?

实现需求的最优方法

假设两个DataFrame分别命名为df1和df2,列名均为a且索引完全一致。以下是两种高效的实现方式,优先推荐第一种掩码式写法(数据量大时性能更优):

方法一:基于布尔掩码的向量化替换

这种方式利用Pandas的向量化操作,避免逐行循环,在大数据量场景下性能更出色:

import pandas as pd

# 构造示例数据(可替换为你的实际数据)
df1 = pd.DataFrame({'a': [[], [1,2,3], [7]]}, index=[1,2,3])
df2 = pd.DataFrame({'a': [[5,2,7], [1,2,3,4], [7,5]]}, index=[1,2,3])

# 生成布尔掩码:标记df1中列表长度≤1的行
mask = df1['a'].apply(lambda x: len(x) <= 1)
# 替换逻辑:掩码为True时用df2对应值,否则保留df1原值
result_df = df1['a'].mask(mask, df2['a']).to_frame()

方法二:逐行判断替换(直观易读)

如果数据量较小,这种写法更直观,便于理解逻辑:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'a': [[], [1,2,3], [7]]}, index=[1,2,3])
df2 = pd.DataFrame({'a': [[5,2,7], [1,2,3,4], [7,5]]}, index=[1,2,3])

# 逐行判断并替换
result_df = df1.apply(
    lambda row: df2.loc[row.name, 'a'] if len(row['a']) <= 1 else row['a'],
    axis=1
).to_frame('a')

两种方法最终都会得到期望结果:

a
1  [5, 2, 7]
2  [1, 2, 3]
3     [7, 5]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:50:26