我有以下列表:
DBCC CHECKIDENT (INTERROR, RESEED, 67000)
INSERT INTO dbo.INTERROR SELECT INTRFLINENO,CASENO... FROM INTERROR_TEMP
我想创建一个pandas数据框:
aa = ['aa1', 'aa2', 'aa3', 'aa4', 'aa5']
bb = ['bb1', 'bb2', 'bb3', 'bb4', 'bb5']
cc = ['cc1', 'cc2', 'cc3', 'cc4', 'cc5']
我被困在如何做到这一点。 我看了几个例子: How to generate all permutations of a list in Python
我可以使用以下方式单独进行每个排列:
aa bb cc
aa1 bb1 cc1
aa2 bb1 cc1
aa3 bb1 cc1
aa4 bb1 cc1
aa5 bb1 cc1
aa1 bb2 cc1
aa1 bb3 cc1
aa1 bb4 cc1
aa1 bb5 cc1
aa1 bb1 cc2
aa1 bb1 cc3
aa1 bb1 cc4
aa1 bb1 cc5
我有几十个列表,理想情况下,我想自动执行这些列表。
感谢任何帮助!
答案 0 :(得分:4)
我认为您需要itertools.product
,而不是permutations
。
In [287]: lists = [aa, bb, cc]
In [288]: pd.DataFrame(list(itertools.product(*lists)), columns=['aa', 'bb', 'cc'])
Out[288]:
aa bb cc
0 aa1 bb1 cc1
1 aa1 bb1 cc2
2 aa1 bb1 cc3
3 aa1 bb1 cc4
4 aa1 bb1 cc5
5 aa1 bb2 cc1
6 aa1 bb2 cc2
7 aa1 bb2 cc3
8 aa1 bb2 cc4
...
这将为您提供列表中的笛卡尔积。截至目前,列名称是硬编码的,但您可以使用df.rename
动态重命名它们。
答案 1 :(得分:0)
我建议创建3个数据帧,然后将它们相加:
aa = ['aa1', 'aa2', 'aa3', 'aa4', 'aa5']
bb = ['bb1', 'bb2', 'bb3', 'bb4', 'bb5']
cc = ['cc1', 'cc2', 'cc3', 'cc4', 'cc5']
df1= pd.DataFrame({'aa':aa})
df1['bb']= 'bb1'
df1['cc']= 'cc1'
df2= pd.DataFrame({'bb':bb[1:]})
df2['aa']= 'aa1'
df2['cc']= 'cc1'
df3= pd.DataFrame({'cc':cc[1:]})
df3['bb']= 'bb1'
df3['aa']= 'aa1'
df= df1.append(df2).append(df3)
它应该返回您想要的数据帧,
我希望我能帮忙!