如何在Pandas中对单列进行无聚合分组并拆分数据集?
Pandas GroupBy 问题解决方案
原始数据集
首先给出用于测试的数据集代码:
import pandas as pd data = { 'month': ['2022-01-01', '2022-02-01', '2022-03-01', '2022-01-01', '2022-02-01', '2022-03-01', '2022-01-01', '2022-02-01', '2022-03-01'], 'Name': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 'num': [1234, 1234, 1234, 456, 456, 456, 456, 100, 200] } df = pd.DataFrame(data)
原始DataFrame展示:
![原始DataFrame]
问题1:按单列进行无聚合分组
使用groupby()指定目标列即可生成无聚合的GroupBy对象,该对象包含拆分后的子DataFrame。你可以通过遍历或get_group()方法查看具体分组内容:
# 按Name列生成无聚合分组 grouped_by_name = df.groupby('Name') # 遍历所有分组 for group_name, sub_df in grouped_by_name: print(f"分组名称:{group_name}") print(sub_df) print("-"*20) # 获取单个指定分组(例如Name为'A'的分组) group_a = grouped_by_name.get_group('A') print(group_a)
执行后会得到按Name列拆分的三个子DataFrame,每个子DataFrame保留原数据的所有列与对应行,对应预期结果:
![无聚合分组预期结果]
问题2:按月份拆分数据集
你可以直接按month列分组实现拆分,也可以基于问题1的分组进行嵌套拆分,两种方式如下:
方式1:直接按月份拆分
# 按month列分组 grouped_by_month = df.groupby('month') # 遍历每个月份的子数据集 for month, sub_df in grouped_by_month: print(f"月份:{month}") print(sub_df) print("-"*20)
方式2:先按Name分组,再按月份嵌套拆分
# 嵌套分组:先按Name,再按month nested_groups = df.groupby(['Name', 'month']) # 遍历嵌套分组 for (name, month), sub_df in nested_groups: print(f"Name: {name},月份: {month}") print(sub_df) print("-"*20)
执行后会得到按每个月份拆分的子数据集,每个子数据集包含对应月份的所有行数据,对应预期结果:
![按月份拆分预期结果]
内容的提问来源于stack exchange,提问作者Bad Coder
相关产品推荐
相关产品推荐

