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

如何在Pandas中合并同name/last_name/address行的x_list与y_list?

解决方案

针对你的需求,我们可以利用Pandas的groupby+agg组合高效完成分组合并操作,5.8万行数据的处理完全可以轻松应对。

步骤1:数据准备(如果是从外部导入数据,需先确保列表格式正确)

如果你的x_list和y_list是字符串格式(比如"['one']"),需要先转换成实际的列表对象:

import pandas as pd
import ast

# 假设从CSV读取数据
df = pd.read_csv('your_data.csv')
# 将字符串格式的列表转为实际列表
df['x_list'] = df['x_list'].apply(ast.literal_eval)
df['y_list'] = df['y_list'].apply(ast.literal_eval)

步骤2:分组合并核心代码

from itertools import chain

# 按指定列分组,聚合生成结果
result_df = df.groupby(['name', 'last_name', 'address'], as_index=False).agg(
    id=('id', 'first'),  # 取每组的第一个id
    x_list=('x_list', lambda x: list(chain.from_iterable(x))),  # 合并x列表
    y_list=('y_list', lambda x: list(chain.from_iterable(x)))   # 合并y列表
)

# 按id排序,和示例输出顺序一致
result_df = result_df.sort_values('id').reset_index(drop=True)

代码说明

  • 分组键:以name、last_name、address作为分组依据,确保相同信息的行被归为一组。
  • 聚合规则:
    • id取每组的第一个值,和你给出的输出示例对应;
    • 使用itertools.chain.from_iterable合并列表,相比sum(x, []),它通过迭代器拼接,内存占用更低,处理大量数据时性能更优。
  • 排序重置索引:保证最终结果的顺序和示例一致。

示例验证

用你提供的测试数据运行上述代码,会得到完全符合要求的输出:

idnamelast_nameaddressx_listy_list
1'John''Smith''add_1'['one', 'three'][1, 3]
2'Tom''Davis''add_2'['two', 'four'][2, 4]
3'Susan''Jones''add_1'['one'][1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:01:17