Python 3.6中按不同类别拆分数据集的方法求助
用Pandas的
groupby批量拆分数据集的解决方案 嘿,手动切片上千个类别确实太折磨人了!groupby就是专门解决这类分组问题的神器,我给你详细讲讲怎么用它批量处理你的需求:
核心思路
通过pandas.DataFrame.groupby('CLASS')按类别分组,然后遍历每个分组,把它们转换成你需要的numpy数组(和你手动切片后.values的结果一致),最后把这些子数据集存到字典里,方便后续按类别名调用。
完整代码示例
首先假设你已经加载好数据集了,以下是完整的实现步骤:
import pandas as pd # 示例加载你的数据集(实际中你可以用pd.read_csv读取本地文件) data = """CLASS, value1 A, 1 A, 2 A, 3 A, 5 B, 4 B, 1 B, 2 C, 1 C, 5""" dataset = pd.read_csv(pd.io.common.StringIO(data)) # 关键步骤:按CLASS分组并批量生成子数据集 grouped_data = {} # 遍历每个分组,class_name是类别名(比如A、B、C),group是对应类别的DataFrame for class_name, group in dataset.groupby('CLASS'): # 将分组后的DataFrame转换成numpy数组,存入字典 grouped_data[class_name] = group.values
如何使用生成的子数据集
现在你可以直接通过类别名快速调用对应的子数据集:
# 获取类别A的子数据集,和你手动切片的datasetA完全一致 print(grouped_data['A']) # 输出: # [['A' 1] # ['A' 2] # ['A' 3] # ['A' 5]]
扩展用法
- 如果只需要value1列的数值数组(不需要CLASS列),可以修改赋值语句:
grouped_data[class_name] = group['value1'].values - 如果想一次性获取所有分组的列表(每个元素是(类别名, 子DataFrame)的元组),可以直接用:
group_list = list(dataset.groupby('CLASS')) # 比如取第一个分组:group_list[0] → ('A', 对应DataFrame)
这种方法完全自动化,不管你有多少个类别(哪怕几千种),都能一键完成拆分,再也不用手动计算切片索引啦!
内容的提问来源于stack exchange,提问作者蒟蒻海
相关产品推荐
相关产品推荐

