我目前正在尝试创建一个大量的置换值表。
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'对象不可迭代"。
干杯。
答案 0 :(得分:0)
如果您的麻烦与性能或记忆有关:
我认为问题在于您使用生成器itr.permutations
并将整个事物转换为列表:
permC = list(itr.permutations(locC, 3))
从而破坏了发电机的整个点。
您应该在生成每个排列时对其进行处理,然后将其丢弃。这将显着降低您的内存配置文件并加快计算速度。
for pair in itr.permutations(locC, 3):
# Do your stuff
在上面的代码中,每对只在迭代期间存在,之后生成下一对。