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

Python Pandas新手求助:如何合并DataFrame字符串并拆分列?

解决你的Pandas DataFrame合并与拆分需求

嘿,刚接触Python和Pandas是吧?别慌,你要的这两个操作其实很容易实现,我给你一步步拆解,附带可运行的代码:

首先,先把你提供的DataFrame_1用代码构造出来,方便你复现:

import pandas as pd

# 构造DataFrame_1
df1 = pd.DataFrame({
    'id': ['a', 'a', 'a', 'a', 'a', 'a'],
    'id_name': ['name_a', 'name_b', 'name_a', 'name_b', 'name_a', 'name_b'],
    'revenue': [65, 65, 70, 70, 121, 121]
})

第一步:生成DataFrame_2(按revenue合并字符串)

我们需要按id和revenue分组,把每组里的id_name用逗号加空格连接起来。用groupby配合agg就能搞定:

# 分组聚合得到DataFrame_2
df2 = df1.groupby(['id', 'revenue'])['id_name'].agg(', '.join).reset_index()
# 调整列的顺序(和你给出的DataFrame_2结构一致)
df2 = df2[['id', 'id_name', 'revenue']]

这里的groupby(['id', 'revenue'])会把所有id和revenue都相同的行归为一组,agg(', '.join)则把每组里的id_name字符串用, 拼接起来,最后reset_index()是把分组的键变回普通列,避免索引混乱。

运行后你得到的df2就和你想要的DataFrame_2完全一致啦!

第二步:生成DataFrame_3(拆分id_name列)

接下来把df2里的id_name列拆分成两列id_name1和id_name2,用str.split方法就能实现:

# 拆分id_name列,expand=True会把拆分结果变成多列
split_cols = df2['id_name'].str.split(', ', expand=True)
# 给拆分后的列命名
split_cols.columns = ['id_name1', 'id_name2']
# 把拆分后的列和原df2的id、revenue列合并,得到DataFrame_3
df3 = pd.concat([df2[['id', 'revenue']], split_cols], axis=1)
# 调整列的顺序(和你给出的DataFrame_3结构一致)
df3 = df3[['id', 'id_name1', 'id_name2', 'revenue']]

这里str.split(', ', expand=True)会把每个id_name字符串按, 分割成两个元素,并且扩展成两列;pd.concat则把原数据的id、revenue列和拆分后的列横向拼接起来,最后调整列顺序就得到了你要的DataFrame_3。

如果你想更简洁一点,也可以直接在df2上操作:

df3 = df2.assign(
    id_name1=df2['id_name'].str.split(', ', expand=True)[0],
    id_name2=df2['id_name'].str.split(', ', expand=True)[1]
).drop('id_name', axis=1)[['id', 'id_name1', 'id_name2', 'revenue']]

这个写法用assign直接添加新列,然后删掉原来的id_name列,再调整顺序,结果是一样的。

内容的提问来源于stack exchange,提问作者Владислав Никитенко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:29:24