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

如何将单个Pandas DataFrame按veh值拆分为多个DataFrame列表?

解决方案:按非连续veh值拆分Pandas DataFrame为多个DataFrame列表

核心问题原因

你之前的代码报错是因为range(1,100)包含了DataFrame中不存在的veh值,调用get_group时找不到对应分组,触发KeyError。解决的关键是只遍历实际存在的分组键,而非假设连续范围。

方案1:遍历GroupBy的有效分组键(推荐)

直接基于groupby后的分组键生成列表,自动跳过不存在的veh值,无需手动判断:

import pandas as pd

# 示例数据(模拟ped=1,veh非连续的情况)
data = {'ped': [1]*10, 'veh': [1,1,2,2,3,3,5,5,6,6], 'value': range(10)}
df = pd.DataFrame(data)

# 按ped和veh分组
grouped = df.groupby(['ped', 'veh'])

# 生成对应每个存在分组的DataFrame列表
df_list = [grouped.get_group(key) for key in grouped.groups.keys()]

# 验证结果(可选)
for idx, sub_df in enumerate(df_list):
    print(f"第{idx+1}个分组(ped={sub_df['ped'].iloc[0]}, veh={sub_df['veh'].iloc[0]}):")
    print(sub_df)

方案2:筛选存在的veh值后循环

如果需要限定处理特定范围的veh值(比如1-100),先筛选出DataFrame中实际存在的目标值,再循环生成子DataFrame:

# 定义目标veh范围
target_vehs = range(1, 100)
# 获取df中存在的、且在目标范围内的veh值
existing_vehs = set(df['veh']).intersection(target_vehs)

# 生成子DataFrame列表(假设ped固定为1)
df_list = []
for veh in existing_vehs:
    sub_df = df[(df['ped'] == 1) & (df['veh'] == veh)]
    df_list.append(sub_df)

方案3:用GroupBy的apply快速生成列表

更简洁的写法,直接将每个分组转为列表元素:

grouped = df.groupby(['ped', 'veh'])
df_list = grouped.apply(lambda x: x.copy()).tolist()

注:使用x.copy()是避免子DataFrame和原DataFrame共享内存,根据需求选择是否添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:50:25