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

如何将Pandas分组后的多个DataFrame合并为单个数据集?

Pandas分组合并后汇总为单个DataFrame问题

问题描述

我是Python新手,现有包含ID、ENTITY_NAME、ENTITY_VALUE、SECTION_GROUP、DOC_ID列的数据集,执行以下Pandas代码按SECTION_GROUP分组,并将SECTION_GROUP为NaN的行合并至每个分组结果,得到两个独立的DataFrame。现需将这两个结果合并为单个完整的DataFrame,寻求技术帮助。

原数据集

IDENTITY_NAMEENTITY_VALUESECTION_GROUPDOC_ID
1dNumberU220059090GROUP 140
2tDate6-Dec-22GROUP 140
3dNumberU220059090GROUP 240
4tDate6-Dec-22GROUP 240
5sCompanybpnan40
6dNumberU220059090GROUP 145
7tDate6-Dec-22GROUP 145
8dNumberU220059090GROUP 245
9tDate6-Dec-22GROUP 245
10sCompanybpnan45

执行代码

import pandas as pd
import numpy as np

df = pd.read_csv ('dups_check_group_v1.csv',encoding= 'unicode_escape',usecols= ['ID','ENTITY_NAME','ENTITY_VALUE','SECTION_GROUP','DOC_ID'])

mask = df['SECTION_GROUP'].isna()
rest = df[mask]

for _, g in df[~mask].groupby('SECTION_GROUP'):
    g = pd.concat([g, rest])
    print(g)

当前输出结果

ID ENTITY_NAME   ENTITY_VALUE SECTION_GROUP  DOC_ID
0   1     dNumber  U220059090(C)       GROUP 1      40
1   2       tDate       6-Dec-22       GROUP 1      40
5   6     dNumber  U220059090(C)       GROUP 1      45
6   7       tDate       6-Dec-22       GROUP 1      45
4   5    sCompany             bp           NaN      40
9  10    sCompany             bp           NaN      45

   ID ENTITY_NAME   ENTITY_VALUE SECTION_GROUP  DOC_ID
2   3     dNumber  U220059090(C)       GROUP 2      40
3   4       tDate       6-Dec-22       GROUP 2      40
7   8     dNumber  U220059090(C)       GROUP 2      45
8   9       tDate       6-Dec-22       GROUP 2      45
4   5    sCompany             bp           NaN      40
9  10    sCompany             bp           NaN      45

期望输出结果

ID ENTITY_NAME   ENTITY_VALUE SECTION_GROUP  DOC_ID
0   1     dNumber  U220059090(C)       GROUP 1      40
1   2       tDate       6-Dec-22       GROUP 1      40
5   6     dNumber  U220059090(C)       GROUP 1      45
6   7       tDate       6-Dec-22       GROUP 1      45
4   5    sCompany             bp           NaN      40
9  10    sCompany             bp           NaN      45
2   3     dNumber  U220059090(C)       GROUP 2      40
3   4       tDate       6-Dec-22       GROUP 2      40
7   8     dNumber  U220059090(C)       GROUP 2      45
8   9       tDate       6-Dec-22       GROUP 2      45
4   5    sCompany             bp           NaN      40
9  10    sCompany             bp           NaN      45

解决方案

你当前的代码只是在循环里打印每个分组合并后的结果,没有把它们收集起来合并成一个DataFrame。可以通过一个列表来存储每个分组处理后的DataFrame,最后用pd.concat把列表里的所有DataFrame合并成一个完整的结果。

修改后的代码如下:

import pandas as pd
import numpy as np

df = pd.read_csv('dups_check_group_v1.csv', encoding='unicode_escape', usecols=['ID','ENTITY_NAME','ENTITY_VALUE','SECTION_GROUP','DOC_ID'])

mask = df['SECTION_GROUP'].isna()
rest = df[mask]

# 创建列表存储每个分组处理后的结果
result_frames = []
for _, g in df[~mask].groupby('SECTION_GROUP'):
    merged_group = pd.concat([g, rest])
    result_frames.append(merged_group)

# 合并所有分组结果为单个DataFrame
final_df = pd.concat(result_frames)
print(final_df)

这段代码会将每个分组合并NaN行后的DataFrame存入result_frames列表,最后通过pd.concat将列表中的所有DataFrame纵向拼接,得到你期望的完整DataFrame。如果需要重置索引,可以在pd.concat中添加ignore_index=True参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:58:21