如何将单个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
相关产品推荐
相关产品推荐

