【问题标题】:How to increment i in the loop for using python to select different column如何在循环中增加 i 以使用 python 选择不同的列
【发布时间】:2019-02-02 00:44:34
【问题描述】:

我想知道如何在 Python 3 中创建一个循环来增加特定应用程序的 i、j、k ... 的值。

我需要选择不同的列,但它们不能自己选择。假设我的数据框有 7 列。下面我举个例子。

这个想法是创建一个这样的选择:

[0, 1]
[0, 2]
[0, 3]
[0, 4]
[0, 5]
[0, 6]
 ...
[0, 3, 6]
[0, 3, 7]
[0, 4, 5]
[0, 4, 6]
[0, 4, 7]
[0, 5, 6]
[0, 5, 7]
[0, 6, 7]
[0, 1, 2, 3]
[0, 1, 2, 4]
[0, 1, 2, 5]
[0, 1, 2, 6]
[0, 1, 2, 7]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 5]
[0, 1, 2, 3, 6]
[0, 1, 2, 3, 7]
 ...
[0, 1, 2, 3, 4, 7]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 7]
[0, 1, 2, 3, 4, 5, 8]
[0, 1, 2, 3, 4, 5, 6, 7]

经过一些回复,我可以创建以下代码:

from itertools import combinations 
numbers = [] 
A = [0,1,2,3,4,5,6,7] 
for i in range(8): 
   for combo in combinations(A, i+2): 
      numbrs.append(combo)

输出是:

[(0, 1),
 (0, 2),
 (0, 3),
 (0, 4), ...

如何使用这些数字作为 iloc 迭代器的索引?

例如,生成的数字必须替换代码:

df.iloc[:,[i, j, k, ...]]

然后我就可以在列之间进行交互了

【问题讨论】:

  • 使用具有不同r 长度的itertools.combinations(例如range(2, number_of_columns+1)
  • 不清楚你想做什么,但这听起来很像itertools.combinations的工作。
  • 谢谢,我想把我提到的方括号内的数字打印出来。
  • @Alambak 逻辑在这里,如果你有 [1,2]....[1 7] 为什么你没有 [1,2,3]....[1,2, 7]
  • 必须使用由 intertools df.iloc[:,[i, j, k, ...]] 生成的 i,j,k... 来访问数据帧 df.iloc[:,[0, 1, 2, 3]] 的索引

标签: python pandas loops increment


【解决方案1】:

您可以使用itertools.combinationsitertools.chain 解决此问题:

import itertools as it

list(it.chain(*(it.combinations(range(8), r) for r in range(2, 9))))

如果您愿意,也可以使用列表推导:

[x for r in range(2, 9) for x in it.combinations(range(8), r)] 

这会产生以下输出:

[(0, 1),
 (0, 2),
 (0, 3),
 (0, 4),
 (0, 5),
 (0, 6),
 (0, 7),
 (1, 2),
 (1, 3),
 (1, 4),
 (1, 5),
 (1, 6),
 (1, 7),
 (2, 3),
 (2, 4),
 (2, 5),
 (2, 6),
 (2, 7),
 (3, 4),
 (3, 5),
 (3, 6),
 (3, 7),
 (4, 5),
 (4, 6),
 (4, 7),
 (5, 6),
 (5, 7),
 (6, 7),
 (0, 1, 2),
 (0, 1, 3),
 (0, 1, 4),
 (0, 1, 5),
 (0, 1, 6),
 (0, 1, 7),
 (0, 2, 3),
 (0, 2, 4),
 (0, 2, 5),
 (0, 2, 6),
 (0, 2, 7),
 (0, 3, 4),
 (0, 3, 5),
 (0, 3, 6),
 (0, 3, 7),
 (0, 4, 5),
 (0, 4, 6),
 (0, 4, 7),
 (0, 5, 6),
 (0, 5, 7),
 (0, 6, 7),
 (1, 2, 3),
 (1, 2, 4),
 (1, 2, 5),
 (1, 2, 6),
 (1, 2, 7),
 (1, 3, 4),
 (1, 3, 5),
 (1, 3, 6),
 (1, 3, 7),
 (1, 4, 5),
 (1, 4, 6),
 (1, 4, 7),
 (1, 5, 6),
 (1, 5, 7),
 (1, 6, 7),
 (2, 3, 4),
 (2, 3, 5),
 (2, 3, 6),
 (2, 3, 7),
 (2, 4, 5),
 (2, 4, 6),
 (2, 4, 7),
 (2, 5, 6),
 (2, 5, 7),
 (2, 6, 7),
 (3, 4, 5),
 (3, 4, 6),
 (3, 4, 7),
 (3, 5, 6),
 (3, 5, 7),
 (3, 6, 7),
 (4, 5, 6),
 (4, 5, 7),
 (4, 6, 7),
 (5, 6, 7),
 (0, 1, 2, 3),
 (0, 1, 2, 4),
 (0, 1, 2, 5),
 (0, 1, 2, 6),
 (0, 1, 2, 7),
 (0, 1, 3, 4),
 (0, 1, 3, 5),
 (0, 1, 3, 6),
 (0, 1, 3, 7),
 (0, 1, 4, 5),
 (0, 1, 4, 6),
 (0, 1, 4, 7),
 (0, 1, 5, 6),
 (0, 1, 5, 7),
 (0, 1, 6, 7),
 (0, 2, 3, 4),
 (0, 2, 3, 5),
 (0, 2, 3, 6),
 (0, 2, 3, 7),
 (0, 2, 4, 5),
 (0, 2, 4, 6),
 (0, 2, 4, 7),
 (0, 2, 5, 6),
 (0, 2, 5, 7),
 (0, 2, 6, 7),
 (0, 3, 4, 5),
 (0, 3, 4, 6),
 (0, 3, 4, 7),
 (0, 3, 5, 6),
 (0, 3, 5, 7),
 (0, 3, 6, 7),
 (0, 4, 5, 6),
 (0, 4, 5, 7),
 (0, 4, 6, 7),
 (0, 5, 6, 7),
 (1, 2, 3, 4),
 (1, 2, 3, 5),
 (1, 2, 3, 6),
 (1, 2, 3, 7),
 (1, 2, 4, 5),
 (1, 2, 4, 6),
 (1, 2, 4, 7),
 (1, 2, 5, 6),
 (1, 2, 5, 7),
 (1, 2, 6, 7),
 (1, 3, 4, 5),
 (1, 3, 4, 6),
 (1, 3, 4, 7),
 (1, 3, 5, 6),
 (1, 3, 5, 7),
 (1, 3, 6, 7),
 (1, 4, 5, 6),
 (1, 4, 5, 7),
 (1, 4, 6, 7),
 (1, 5, 6, 7),
 (2, 3, 4, 5),
 (2, 3, 4, 6),
 (2, 3, 4, 7),
 (2, 3, 5, 6),
 (2, 3, 5, 7),
 (2, 3, 6, 7),
 (2, 4, 5, 6),
 (2, 4, 5, 7),
 (2, 4, 6, 7),
 (2, 5, 6, 7),
 (3, 4, 5, 6),
 (3, 4, 5, 7),
 (3, 4, 6, 7),
 (3, 5, 6, 7),
 (4, 5, 6, 7),
 (0, 1, 2, 3, 4),
 (0, 1, 2, 3, 5),
 (0, 1, 2, 3, 6),
 (0, 1, 2, 3, 7),
 (0, 1, 2, 4, 5),
 (0, 1, 2, 4, 6),
 (0, 1, 2, 4, 7),
 (0, 1, 2, 5, 6),
 (0, 1, 2, 5, 7),
 (0, 1, 2, 6, 7),
 (0, 1, 3, 4, 5),
 (0, 1, 3, 4, 6),
 (0, 1, 3, 4, 7),
 (0, 1, 3, 5, 6),
 (0, 1, 3, 5, 7),
 (0, 1, 3, 6, 7),
 (0, 1, 4, 5, 6),
 (0, 1, 4, 5, 7),
 (0, 1, 4, 6, 7),
 (0, 1, 5, 6, 7),
 (0, 2, 3, 4, 5),
 (0, 2, 3, 4, 6),
 (0, 2, 3, 4, 7),
 (0, 2, 3, 5, 6),
 (0, 2, 3, 5, 7),
 (0, 2, 3, 6, 7),
 (0, 2, 4, 5, 6),
 (0, 2, 4, 5, 7),
 (0, 2, 4, 6, 7),
 (0, 2, 5, 6, 7),
 (0, 3, 4, 5, 6),
 (0, 3, 4, 5, 7),
 (0, 3, 4, 6, 7),
 (0, 3, 5, 6, 7),
 (0, 4, 5, 6, 7),
 (1, 2, 3, 4, 5),
 (1, 2, 3, 4, 6),
 (1, 2, 3, 4, 7),
 (1, 2, 3, 5, 6),
 (1, 2, 3, 5, 7),
 (1, 2, 3, 6, 7),
 (1, 2, 4, 5, 6),
 (1, 2, 4, 5, 7),
 (1, 2, 4, 6, 7),
 (1, 2, 5, 6, 7),
 (1, 3, 4, 5, 6),
 (1, 3, 4, 5, 7),
 (1, 3, 4, 6, 7),
 (1, 3, 5, 6, 7),
 (1, 4, 5, 6, 7),
 (2, 3, 4, 5, 6),
 (2, 3, 4, 5, 7),
 (2, 3, 4, 6, 7),
 (2, 3, 5, 6, 7),
 (2, 4, 5, 6, 7),
 (3, 4, 5, 6, 7),
 (0, 1, 2, 3, 4, 5),
 (0, 1, 2, 3, 4, 6),
 (0, 1, 2, 3, 4, 7),
 (0, 1, 2, 3, 5, 6),
 (0, 1, 2, 3, 5, 7),
 (0, 1, 2, 3, 6, 7),
 (0, 1, 2, 4, 5, 6),
 (0, 1, 2, 4, 5, 7),
 (0, 1, 2, 4, 6, 7),
 (0, 1, 2, 5, 6, 7),
 (0, 1, 3, 4, 5, 6),
 (0, 1, 3, 4, 5, 7),
 (0, 1, 3, 4, 6, 7),
 (0, 1, 3, 5, 6, 7),
 (0, 1, 4, 5, 6, 7),
 (0, 2, 3, 4, 5, 6),
 (0, 2, 3, 4, 5, 7),
 (0, 2, 3, 4, 6, 7),
 (0, 2, 3, 5, 6, 7),
 (0, 2, 4, 5, 6, 7),
 (0, 3, 4, 5, 6, 7),
 (1, 2, 3, 4, 5, 6),
 (1, 2, 3, 4, 5, 7),
 (1, 2, 3, 4, 6, 7),
 (1, 2, 3, 5, 6, 7),
 (1, 2, 4, 5, 6, 7),
 (1, 3, 4, 5, 6, 7),
 (2, 3, 4, 5, 6, 7),
 (0, 1, 2, 3, 4, 5, 6),
 (0, 1, 2, 3, 4, 5, 7),
 (0, 1, 2, 3, 4, 6, 7),
 (0, 1, 2, 3, 5, 6, 7),
 (0, 1, 2, 4, 5, 6, 7),
 (0, 1, 3, 4, 5, 6, 7),
 (0, 2, 3, 4, 5, 6, 7),
 (1, 2, 3, 4, 5, 6, 7),
 (0, 1, 2, 3, 4, 5, 6, 7)]

【讨论】:

  • 感谢您的回复;我正在使用以下代码:from itertools import combinations numbers = [] A = [0,1,2,3,4,5,6,7] for i in range(8): for combo in combinations(A, i+2): numbrs.append(combo)
  • 但是现在我无法运行使用 iloc 命令生成的数字。像这样:df.iloc[:,[i, j, k, ...]]
  • @Alambak i + 2 一直运行到 9 但您的序列只有 8 个元素。 it.combinations 还返回元组,因此您需要转换为 list 才能与 iloc 一起使用。
猜你喜欢
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
相关资源
最近更新 更多