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

如何从Pandas DataFrame的data1生成含交叉项的data2?

问题描述

现有如下Pandas DataFrame格式的data1:

import pandas as pd
data1 = pd.DataFrame([('1M, 6M, 1Y'), ('1M, 6M, 1Y')])

其结构为:

0
0  1M, 6M, 1Y
1  1M, 6M, 1Y

需要生成名为data2的DataFrame,其中每行是data1中元素的有序两两交叉组合,预期的data2示例如下:

data2 = pd.DataFrame([('1M', '1M'),
                     ('1M', '6M'),
                     ('1M', '1Y'),
                     ('6M', '1M'),
                     ('6M', '6M'),
                     ('6M', '1Y'),
                     ('1Y', '1M'),
                     ('1Y', '6M'),
                     ('1Y', '1Y'),])

结构为:

0   1
0  1M  1M
1  1M  6M
2  1M  1Y
3  6M  1M
4  6M  6M
5  6M  1Y
6  1Y  1M
7  1Y  6M
8  1Y  1Y
实现方法

可以通过以下简洁步骤完成转换:

步骤1:提取时间周期列表

由于data1两行内容重复,直接提取任意一行的字符串,按逗号分割并整理为干净的周期列表:

periods = data1.iloc[0, 0].split(', ')

步骤2:生成有序交叉组合

使用itertools.product生成所有有序的两两笛卡尔积组合,完美匹配需求的有序交叉项:

from itertools import product
combinations = list(product(periods, periods))

步骤3:转换为目标DataFrame

将组合列表直接转为data2:

data2 = pd.DataFrame(combinations)

合并版代码

如果想一步完成,可将上述逻辑合并:

import pandas as pd
from itertools import product

data1 = pd.DataFrame([('1M, 6M, 1Y'), ('1M, 6M, 1Y')])
data2 = pd.DataFrame(product(data1.iloc[0,0].split(', '), repeat=2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:05:39