PYTHON:从元组列表中创建排列的数据框

时间:2015-06-01 07:57:45

标签: python pandas tuples dataframe permutation

我目前正在尝试创建一个大量的置换值表。

locA = [1, 2, 3]
locB = [4, 5, 6]
locC = [7, 8, 9]

在' loc'值被置换。 ' loc'中的每个值。来自不同的人群(' pop1',' pop2',' pop3')。到目前为止,我已经能够形成一个庞大的元组列表,它将每个内部组合在一起。每一个之间的重新排列' loc'重排。

permA = list(itr.permutations(locA, 3))
permB = list(itr.permutations(locB, 3))
permC = list(itr.permutations(locC, 3))
permABC = list(itr.product(permA,permB,permC))

permABC
[((1, 2, 3), (4, 5, 6), (7, 8, 9)),
((1, 2, 3), (4, 5, 6), (7, 9, 8)),
((1, 2, 3), (4, 5, 6), (8, 7, 9)),

    ... etc etc...

((3, 2, 1), (6, 5, 4), (8, 9, 7)),
((3, 2, 1), (6, 5, 4), (9, 7, 8)),
((3, 2, 1), (6, 5, 4), (9, 8, 7))]   

我一直试图将其变成Pandas DataFrame,但是我无法遍历元组列表以进入DataFrame。 :(

理想格式:

loc  pop1  pop2  pop3
A    1     2     3    |
B    4     5     6    |>>>> permABC[0]
C    7     8     9    |

... etc etc ...

A    3     2     1    |
B    6     5     4    |>>>> permABC[215]
C    9     8     7    |

我的问题是将元组列表添加到数据帧中。我需要让每一个组合成为可能的' loc'。例如。所有可能的重新排列' locA'重新排列' locB'重新排列' locC'。

为了正确看待这一点,对于每个人口的任何特定排列,我都需要进行计算。为了论证,在上文中,对于perABC [0]'和' permABC [215],'意思是' pop1'分别是4和6。

我只是不确定如何动态执行此操作,目前在我的编码级别,它更容易将事物锚定到我可以操作的数据框中。我尝试使用索引来为permABC'中的任何给定排列提取特定于群体的信息,例如

for item in permABC[0]:
    print item[0]
    1
    4
    7

哪个有效,但使用这种方法是不可行的,因为你不能对它们做任何功能;返回TypeError"' int'对象不可迭代"。

干杯。

1 个答案:

答案 0 :(得分:0)

如果您的麻烦与性能或记忆有关:

我认为问题在于您使用生成器itr.permutations并将整个事物转换为列表:

permC = list(itr.permutations(locC, 3))

从而破坏了发电机的整个点。

您应该在生成每个排列时对其进行处理,然后将其丢弃。这将显着降低您的内存配置文件并加快计算速度。

for pair in itr.permutations(locC, 3):
    # Do your stuff

在上面的代码中,每对只在迭代期间存在,之后生成下一对。

相关问题