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

Pandas分组后如何将up列列表末尾值添加到low列列表?报错解决

问题解决:为分组后的列表列追加对应列表的最后元素

原始数据与分组操作

首先定义原始DataFrame并完成分组聚合:

import pandas as pd

df_test = pd.DataFrame({"f":['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'],
                        "d":['x', 'x', 'y', 'y', 'x', 'x', 'y', 'y'],
                        "low": [0,5,2,4,5,10,4,8],
                        "up": [5,10,4,6,10,15,8,12],
                        "z": [1,3,6,2,3,7,5,10]})

# 按'f'和'd'分组,将指定列聚合为列表
dff = df_test.groupby(['f','d'])[['low', 'up', 'z']].agg(list).reset_index()

错误原因

你之前的代码报错ValueError: cannot reindex from a duplicate axis,是因为dff['low'].append(dff['last'])是对整个Series执行拼接操作,会生成一个长度翻倍的新Series,而不是逐行将last的值追加到low的列表中,导致索引无法匹配。

正确解决方法

以下三种方式都能实现需求,得到期望的new列值:[0,5,10], [2,4,6], [5,10,15], [4,8,12]

方式一:直接用apply逐行处理

一次完成列表追加操作,无需额外列:

dff['new'] = dff.apply(lambda row: row['low'] + [row['up'][-1]], axis=1)

方式二:先提取last列再拼接

如果需要保留last列,可以分两步:

# 提取每个up列表的最后一个元素
dff['last'] = dff['up'].apply(lambda x: x[-1])
# 逐行将last值追加到low列表
dff['new'] = dff.apply(lambda row: row['low'] + [row['last']], axis=1)

方式三:列表推导式(效率更高)

适合处理大数据量,避免apply的额外开销:

dff['new'] = [low + [up[-1]] for low, up in zip(dff['low'], dff['up'])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:25:33