如何基于DataFrame的A列创建对应分组列表?
按A列分组生成对应B列的列表解决方案
问题描述
现有如下结构的DataFrame:
A B C 1 14 100 1 15 101 1 16 102 2 17 103 2 18 104 3 19 105 3 20 106 ... ... ... n
需要针对A列中从1到n的每个数值,生成对应分组的B列值列表,输出示例如下:
l1 = [14, 15, 16] (对应A列的1) l2 = [17,18] (对应A列的2) l3 = [19,20] (对应A列的3)
解决方案
方法1:用字典存储分组结果(推荐)
这种方式更灵活,便于后续统一管理和调用分组数据:
import pandas as pd # 初始化示例DataFrame(实际使用时替换为你的数据) df = pd.DataFrame({ 'A': [1,1,1,2,2,3,3], 'B': [14,15,16,17,18,19,20], 'C': [100,101,102,103,104,105,106] }) # 按A列分组,将每组的B列转为列表,存入字典 grouped_data = df.groupby('A')['B'].apply(list).to_dict() # 按要求格式输出 for a_num, b_list in grouped_data.items(): print(f'l{a_num} = {b_list} (对应A列的{a_num})')
方法2:动态生成单独变量
如果确实需要生成l1、l2这类单独命名的变量,可以通过全局命名空间动态创建:
import pandas as pd df = pd.DataFrame({ 'A': [1,1,1,2,2,3,3], 'B': [14,15,16,17,18,19,20], 'C': [100,101,102,103,104,105,106] }) # 遍历分组,动态生成变量 for a_val, b_group in df.groupby('A')['B']: var_name = f'l{a_val}' globals()[var_name] = b_group.tolist() print(f'{var_name} = {globals()[var_name]} (对应A列的{a_val})')
注意:如果A列的分组数量n很大,不推荐方法2,大量单独变量会增加代码维护难度,方法1的字典存储更高效。
内容的提问来源于stack exchange,提问作者AdrixnIPP
相关产品推荐
相关产品推荐

