从列表中创建pandas中的排列数据帧

时间:2017-08-14 10:18:51

标签: python pandas dataframe

我有以下列表:

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

我有几十个列表,理想情况下,我想自动执行这些列表。

感谢任何帮助!

2 个答案:

答案 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)

它应该返回您想要的数据帧,
我希望我能帮忙!