如何将Pandas DataFrame按类别拆分提取数值集合与类别列表
解决方案
嘿,这个需求用Pandas的分组功能就能轻松搞定,我给你一步步拆解:
首先先把你给出的原始数据转换成标准的Pandas DataFrame(方便后续操作):
import pandas as pd # 对应你提供的Cat和Val列数据 df = pd.DataFrame({ 'Cat': ['A', 'B', 'B', 'A'], 'Val': [10, 20, 5, 8] })
接下来分两步得到你要的两个结果:
1. 获取数值集合[[10, 8],[20,5]]
我们可以用groupby按Cat列分组,然后把每个组的Val值转换成列表,最后转成嵌套列表格式:
# 按Cat分组,提取每个组的Val列表并转成嵌套列表 numeric_groups = df.groupby('Cat')['Val'].apply(list).tolist()
执行后numeric_groups就是你要的[[10, 8], [20, 5]]。
2. 获取类别列表[A,B]
要保证类别顺序和数值集合的顺序完全对应,直接取分组后的索引即可:
# 获取分组后的类别并转成列表 category_list = list(df.groupby('Cat').groups.keys())
这样category_list就是['A', 'B']。
完整代码示例
把上面的步骤整合起来,运行就能得到你想要的结果:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Cat': ['A', 'B', 'B', 'A'], 'Val': [10, 20, 5, 8] }) # 生成数值集合 numeric_groups = df.groupby('Cat')['Val'].apply(list).tolist() # 生成类别列表 category_list = list(df.groupby('Cat').groups.keys()) print("数值集合:", numeric_groups) print("类别列表:", category_list)
运行输出:
数值集合: [[10, 8], [20, 5]] 类别列表: ['A', 'B']
如果你不想让类别按排序后的顺序展示(比如想保留原始数据中首次出现的顺序),可以用pd.unique()来获取类别:
category_list = df['Cat'].unique().tolist()
这样得到的是['A', 'B'](和原始数据首次出现顺序一致),和分组后的结果顺序刚好匹配,因为你的数据中A先出现,B后出现,分组默认排序也是A在前B在后~
内容的提问来源于stack exchange,提问作者NBC
相关产品推荐
相关产品推荐

