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

