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

如何基于DataFrame列中特定值迭代切片并生成新DataFrame?

基于DataFrame列值分组提取切片的解决方案

嗨,我来帮你搞定这个需求!其实完全不需要手动逐行迭代来实现,Pandas自带的groupby工具就能高效完成这个任务,而且性能比循环行好太多了。

首先先把你给出的列表转换成正确的Pandas DataFrame:

import pandas as pd

districts = [['dist','name','sale','purchase'],
             ['dis1','avelin',2300, 1400],
             ['dis2','matri', 4300, 2500], 
             ['dis1', 'texi', 1500, 1700],
             ['dis2','timi', 2300, 1400]]

# 第一行是列名,后面的是数据行
df = pd.DataFrame(districts[1:], columns=districts[0])

推荐方案:用groupby快速生成目标结果

这是最符合Pandas设计理念的方法,一步到位就能得到你想要的字典格式:

# 按dist列分组,提取sale和purchase列并转成列表的列表,最后转成字典
result_dict = df.groupby('dist')[['sale', 'purchase']].apply(lambda x: x.values.tolist()).to_dict()

运行后result_dict的输出就是你期望的样子:

{'dis1': [[2300, 1400], [1500, 1700]], 'dis2': [[4300, 2500], [2300, 1400]]}

如果你想单独取出每个district的结果,直接用键访问就行,比如result_dict['dis1']就能得到对应的数据列表。

为什么不推荐手动迭代行?

很多人刚开始用Pandas会习惯用iterrows()逐行遍历,但这种方式在数据量较大时效率极低——Pandas是为向量化批量操作优化的,groupby内部已经做了高效的批量处理,比循环行快几倍甚至几十倍。

如果你一定要用迭代方式(不推荐)

如果因为特殊场景必须手动遍历行,也可以这样实现:

result_dict = {}
# 遍历每一行,_是行索引,我们这里用不到
for _, row in df.iterrows():
    dist_key = row['dist']
    # 提取当前行的sale和purchase值组成列表
    current_data = [row['sale'], row['purchase']]
    # 如果这个district还没在字典里,先初始化一个空列表
    if dist_key not in result_dict:
        result_dict[dist_key] = []
    # 将当前数据添加到对应district的列表中
    result_dict[dist_key].append(current_data)

这个方法也能得到同样的结果,但只适合小数据量的场景,大数据量下还是优先用groupby。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:44:08