如何基于DataFrame列值创建多列表并处理多分类归属
解决方案:按类别拆分并生成Ticker列表
这里有个简洁高效的方法来实现你想要的效果,我平时处理这类DataFrame分组需求时也常用这个思路,核心是先拆分多类别行,再分组收集对应的Ticker:
步骤说明与代码实现
import pandas as pd # 初始化你的原始DataFrame df1 = pd.DataFrame({ 'Ticker': ['XOM', 'CVX', 'RDSA-GB', 'BP-GB', 'EQNR-NO', 'FP-FR', 'ENI-IT', 'COP'], 'Category': ['Group 1', 'Group 1', 'Group 2', 'Group 1, Group 2', 'Group 3', 'Group 4', 'Group 3, Group 4', 'Group 5'] }) # 1. 拆分多类别并将每个类别单独成行 df_expanded = df1.assign(Category=df1['Category'].str.split(', ')).explode('Category') # 2. 把Category中的空格替换为下划线,生成目标变量名格式 df_expanded['Category'] = df_expanded['Category'].str.replace(' ', '_') # 3. 按处理后的Category分组,将每个组的Ticker收集为列表 grouped_tickers = df_expanded.groupby('Category')['Ticker'].apply(list).to_dict() # 4. (可选)将字典中的列表转为全局变量,直接使用Group_1这类名称 for group_name, ticker_list in grouped_tickers.items(): globals()[group_name] = ticker_list
代码解释
- 拆分与展开:用
str.split(', ')把包含多个类别的字符串拆成列表,再通过explode让每个类别对应单独的行,这样像BP-GB这类属于多个组的Ticker会被分配到对应组的行中。 - 名称格式化:用
str.replace(' ', '_')把"Group 1"转为"Group_1",完全匹配你需要的变量名格式。 - 分组收集:通过
groupby+apply(list)把每个组的Ticker整理成列表,并存入字典方便后续调用。 - 转为全局变量:如果需要直接调用
Group_1这类变量,用globals()把字典的键值对转为全局变量,运行后就能直接使用这些列表了。
验证结果
运行代码后,你可以直接打印变量查看结果:
print(Group_1) # 输出: ['XOM', 'CVX', 'BP-GB'] print(Group_2) # 输出: ['RDSA-GB', 'BP-GB'] print(Group_3) # 输出: ['EQNR-NO', 'ENI-IT'] print(Group_4) # 输出: ['FP-FR', 'ENI-IT'] print(Group_5) # 输出: ['COP']
内容的提问来源于stack exchange,提问作者Jaiale1
相关产品推荐
相关产品推荐

