You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件从Pandas DataFrame生成多个列表的技术问题

问题描述

我正在逐步提升编程能力,抱歉又问基础问题。我需要基于特定条件,从Pandas DataFrame生成多个列表:根据YY列的筛选条件,将XX列的内容转为列表。

现有DF1如下:

import pandas as pd
import numpy as np

List1 = ['A','B','C','D']
List2 = ['AA','BB','AA','BB']

DF1 = pd.DataFrame(
{'XX': List1,
 'YY': List2})

# DF1输出如下:
#     XX  YY
# 0   A   AA
# 1   B   BB
# 2   C   AA
# 3   D   BB

实际场景中我只有这个DataFrame,希望得到两个列表:List_AA = ['A','C'] 和 List_BB = ['B','D']。

我尝试了手动编码的方式但未成功,代码如下:

List_AA = DF1['XX'].tolist(DF1.loc(DF1['YY']=='AA')
List_BB = DF1['XX'].tolist(DF1.loc(DF1['YY']=='BB')

# 或者我试过:
List_AA = DF1['XX'].tolist(np.where[DF1['YY'] == 'AA')

因此无法推进到更灵活的循环实现,我的伪代码思路如下:

# 伪代码
List3 = DF1['YY'].unique().tolist()

for i in List3:
    List_'i' = DF['XX'].tolist(DF1.loc(DF1['YY']==i))

感谢解答,40+学习新技能不易,我已尽力尝试。
此致,
Devon


解决方案

一、手动生成目标列表的正确写法

你之前的代码存在两处错误:

  • loc 是Pandas的属性访问器,需使用方括号 [],而非圆括号 ()
  • tolist() 方法无需传入参数,正确流程是先筛选出符合条件的XX列数据,再调用tolist()转换

修正后的代码:

# 生成List_AA
List_AA = DF1.loc[DF1['YY'] == 'AA', 'XX'].tolist()
# 生成List_BB
List_BB = DF1.loc[DF1['YY'] == 'BB', 'XX'].tolist()

print(List_AA)  # 输出:['A', 'C']
print(List_BB)  # 输出:['B', 'D']

二、批量生成的优化实现(推荐用字典存储)

动态创建List_AA这类独立变量会导致代码可读性差、维护困难,推荐用字典统一存储所有结果,键为YY列的唯一值(或带前缀的名称),值为对应的XX列表。

方法1:循环实现

# 获取YY列的所有唯一值
unique_yy = DF1['YY'].unique().tolist()

# 初始化空字典存储结果
result_dict = {}

for yy_val in unique_yy:
    # 筛选对应YY值的XX列数据并转成列表
    result_dict[f'List_{yy_val}'] = DF1.loc[DF1['YY'] == yy_val, 'XX'].tolist()

# 调用结果
print(result_dict['List_AA'])  # ['A', 'C']
print(result_dict['List_BB'])  # ['B', 'D']

方法2:Pandas分组高效实现

用groupby可以一步完成分组和列表转换,代码更简洁高效:

# 按YY列分组,将每组的XX列转为列表,再转成字典
raw_result = DF1.groupby('YY')['XX'].apply(list).to_dict()

# 可选:给键添加"List_"前缀
result_dict = {f'List_{k}': v for k, v in raw_result.items()}

print(result_dict)
# 输出:{'List_AA': ['A', 'C'], 'List_BB': ['B', 'D']}

关键说明

  • 不建议动态创建变量:通过globals()或locals()生成独立变量会让命名空间混乱,后续调试和修改难度大,字典是更规范的结构化存储方式。
  • groupby方法优势:Pandas的分组引擎经过优化,处理大规模数据时效率远高于手动循环,代码可读性也更强。

内容的提问来源于stack exchange,提问作者Dev1602

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:20:33