如何合并两个存储列表值的pandas Series并保留指定DataFrame索引
问题原因
你之前使用+或add方法报错,是因为pandas的Series算术运算默认按照索引对齐取值,你的df_1和df_2没有公共索引,对齐后匹配到的值全为NaN,自然无法和列表类型执行加法操作。
你需要忽略索引的影响,按位置匹配两个DataFrame的行拼接列表,最终保留df_1的索引即可,以下是可直接运行的实现方案:
实现代码
方案1:直接提取值运算(最高效)
直接提取df_2对应列的数值数组(不携带索引信息),和df_1的列直接相加:
import pandas as pd # 你的示例数据 df_1 = pd.DataFrame({'publications':[[34499803], [34499125], [34445802, 7092834]]}, index=['0', '4', '2423']) df_2 = pd.DataFrame({'publications':[[65499803, 56899232], [78999821], [87499234]]}, index=['2234', '543', '345']) df_sum = df_1.copy() # 取df_2列的values忽略索引,按位置和df1的列相加 df_sum['publications'] = df_sum['publications'] + df_2['publications'].values
方案2:列表推导式(灵活度高)
通过zip按位置配对两个列的元素,逐行拼接列表,适合需要额外处理每行元素的场景:
df_sum = df_1.copy() df_sum['publications'] = [pub1 + pub2 for pub1, pub2 in zip(df_1['publications'], df_2['publications'])]
行数不一致适配
如果两个DataFrame行数不同,可以先把df_2的列补全到和df_1长度一致,缺失位置用空列表填充,避免索引错误:
# 补全df2的列长度到和df1一致,缺失值用空列表填充 df2_pubs = df_2['publications'].reindex(range(len(df_1)), fill_value=[]).values df_sum['publications'] = df_1['publications'] + df2_pubs
执行后得到的df_sum和你要求的输出完全一致,保留了df_1的原始索引,列表元素顺序可以根据需求调整。
内容的提问来源于stack exchange,提问作者G. Macia
相关产品推荐
相关产品推荐

