当前位置: 首页 > 知识库问答 >
问题:

PYTHON:从元组列表创建置换数据帧

夏晋
2023-03-14

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

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

“loc”内的值是置换的。“loc”中的每个值都来自不同的总体(“pop1”、“pop2”、“pop3”)。到目前为止,我已经能够形成一个庞大的元组列表,它结合了“loc”内的每个重排和“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))]   

我一直试图将它放入熊猫的数据帧中,但是我在遍历元组列表以放入数据帧时遇到了困难。:(

理想格式

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' object is not iterable”。

干杯。

共有1个答案

钦耀
2023-03-14

如果您的问题与性能或内存有关:

我认为问题在于你用一个生成器< code>itr.permutations把所有东西转换成一个列表:

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

从而破坏了发电机的全部功能。

你应该在每个排列产生的时候处理它,然后扔掉它。这将大大降低你的内存配置文件,也加快了你的计算速度。

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

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

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 我有两个清单: 我需要从这些列表中创建一个元组列表,如下所示: 我尝试这样做: 但导致: 即x中每个元素与y中每个元素的元组列表…什么是我想做的正确方法?谢谢… 编辑: 在编辑之前提到的其他两个重复是我的错,我将其缩进另一个for循环中是错误的… 问题答案: 使用内置函数: 在Python 3中: 在Python 2中:

  • 问题内容: 我有一个像这样的清单: 但是更大了,所以我需要一种有效的方法来使它变成像这样的树: 我不能使用诸如嵌套集之类的东西,也不能使用诸如becoas之类的东西,因为我可以在数据库中添加左右值。有任何想法吗? 问题答案: 哦,这就是我解决的方法:

  • 我有这样的df: 如何将转换为元组列表并分配给变量?然后创建一个只有col4的数组并赋值给变量? 示例最终结果:

  • 问题内容: 我正在尝试在表中插入数组,但需要将列表转换为SQL Array类型。我正在使用该方法,但出现异常。 我需要传递一个类型名称,但是我不知道这是什么,而且我总是会遇到异常。该数组来自VARCHAR。 我该如何解决插入数组? 代码 堆栈跟踪 问题答案: 使用“ varchar”而不是“ VARCHAR”。参见http://grepcode.com/file/repo1.maven.org/m

  • 问题内容: 我需要增量填充列表或列表元组。看起来像这样: 为了使它不那么冗长,更优雅,我想我会预先分配一个空列表 预分配部分对我来说并不明显。当我这样做时,我会收到对同一列表的引用列表,因此以下内容的输出 是: 我可以使用循环(),但我想知道是否存在“无环”解决方案。 是获得我想要的东西的唯一方法 问题答案: 这将创建x个不同的列表,每个列表都有一个列表副本(该列表中的每个项目都是通过引用提供的,

  • 问题内容: 我有这样的数据我想创建一个PySpark数据框 我已经用过 但我总是得到 我如何获得如下所示的结果? 问题答案: 我发现将参数视为元组列表很有用,其中列表中的每个条目对应于DataFrame中的一行,而元组的每个元素对应于一列。 您可以通过将列表中的每个元素设为元组来获得所需的输出: 或者,如果更改源很麻烦,则可以等效地执行以下操作: