如何基于拆分后的Origin列表将生成的DataFrame拆分为多个子DataFrame?
解决方案
要按origin_li的分组拆分最终的大DataFrame,核心是在生成笛卡尔积的过程中保留分组标识,后续通过这个标识进行拆分。具体步骤如下:
1. 修改DataFrame生成代码,添加分组标识
在遍历origin_li时,用enumerate获取分组索引,为每个子DataFrame添加group_id列,标记该数据属于origin_li中的哪一组。修改后的代码如下:
import pandas as pd import itertools origin_list = ['60.17202,24.91805','51.13747,1.33148','55.65348,22.94213','61.17202,24.91805','62.13747,1.33148','63.65348,22.94213'] Destination_list = ['51.07906,12.13216','52.96035,1.905025','53.05306,16.13416','54.07906,3.13216','55.03406,12.13216','56.07906,12.13216','57.96035,1.905025','58.05306,16.13416','59.07906,3.13216','60.03406,12.13216'] # 拆分列表 origin_li = [origin_list[i:i + 3] for i in range(0, len(origin_list), 3)] destination_li = [Destination_list[i:i + 4] for i in range(0, len(Destination_list), 4)] df1 = pd.DataFrame() # 遍历origin_li时记录分组ID for group_id, origin_sub in enumerate(origin_li): for dest_sub in destination_li: sub_df = pd.DataFrame(list(itertools.product(origin_sub, dest_sub)), columns=['origin', 'destination']) # 添加分组标识 sub_df['group_id'] = group_id df1 = pd.concat([df1, sub_df], ignore_index=True)
2. 按分组标识拆分DataFrame
现在df1包含了group_id列,可以通过groupby方法直接拆分,将每个分组的DataFrame存入列表,或单独提取:
方法1:拆分到列表中
# 按group_id分组,得到每个子DataFrame的列表 sub_dfs = [group for _, group in df1.groupby('group_id')] # 验证:第一个子DataFrame对应origin_li[0]的所有笛卡尔积结果 print(sub_dfs[0]) # 第二个子DataFrame对应origin_li[1]的所有笛卡尔积结果 print(sub_dfs[1])
方法2:单独提取指定分组
如果需要单独获取某一组的DataFrame,可以直接筛选:
# 获取第0组(对应origin_li[0])的DataFrame group_0_df = df1[df1['group_id'] == 0] # 获取第1组(对应origin_li[1])的DataFrame group_1_df = df1[df1['group_id'] == 1]
为什么需要添加分组标识?
原始代码中生成的df1没有保留任何分组信息,无法直接关联到origin_li的子列表。通过在生成子DataFrame时加入group_id,相当于给每条数据打上了“归属标签”,后续就能精准拆分出对应origin_li分组的子DataFrame。
内容的提问来源于stack exchange,提问作者Namita Tare
相关产品推荐
相关产品推荐

