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

如何按行合并同结构Pandas DataFrame并按names列分组排列?

解决方法

你之前的pd.concat步骤是正确的,但groupby('names')只是创建了分组对象,并没有将数据整理成预期的结构。要得到目标结果,只需要在合并后对names列排序即可:

完整代码

import pandas as pd
import numpy as np

# 示例DataFrame创建
df1 = pd.DataFrame(np.array([['name1', 1, 2], ['name2', 3, 4], ['name3', 5, 6]]),
                   columns=['names', 'val1', 'val2'])
df2 = pd.DataFrame(np.array([['name1', 11, 22], ['name2', 33, 44], ['name3', 55, 66]]),
                   columns=['names', 'val1', 'val2'])
df3 = pd.DataFrame(np.array([['name1', 111, 222], ['name2', 333, 444], ['name3', 555, 666]]),
                   columns=['names', 'val1', 'val2'])

# 合并所有DataFrame
combined_df = pd.concat([df1, df2, df3])

# 按names列排序,聚合相同名称的行,并重设索引
result_df = combined_df.sort_values('names').reset_index(drop=True)

print(result_df)

输出结果

names val1 val2
0  name1    1    2
1  name1   11   22
2  name1  111  222
3  name2    3    4
4  name2   33   44
5  name2  333  444
6  name3    5    6
7  name3   55   66
8  name3  555  666

补充说明

如果想保留names的原始出现顺序(比如示例中name1→name2→name3的顺序),可以用groupby的方式实现:

# 基于groupby的实现方式
result_df = pd.concat([group for _, group in combined_df.groupby('names', sort=False)]).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:40:26