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

如何基于拆分后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:00:59