如何按行合并同结构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
相关产品推荐
相关产品推荐

