迭代逻辑-选择性列组合

时间:2018-07-25 07:41:39

标签: python pandas iteration itertools

我有下面的代码,用于创建数据帧中列的所有可能组合。

import pandas as pd
import numpy as np
import itertools as iter
dates = pd.date_range('20180107',periods=6)
df = pd.DataFrame(np.random.randn(6,12),index=dates,columns=list('ABCDEFGHIJKL'))
cc = list(iter.combinations(df.columns,3))
df2 = pd.concat([df[c[1]].mul(2).sub(df[c[2]]).sub(df[c[0]]) for c in cc], axis=1, keys=cc)

因此,对于具有A到L列的df,这将返回一个具有ABC,ABD,ABE,ABF ...等的新数据帧(2 *中间列-计算中的左-右)

我需要做的是过滤df2中的列,以除去除列的对称组合以外的所有列,即保持ABC,BCD,CDE等以及ACE,BDF等一直到AFK等(即, col1 / col2 / col3组合中的col1 / col2和col2 / col3)。

1 个答案:

答案 0 :(得分:2)

我建议您甚至在创建列之前都要过滤cc列表。然后,您不必处理过滤MultiIndex:

def is_symmetrical(x, y, z):
    return ord(z) - ord(y) == ord(y) - ord(x)

cc = [c for c in cc if is_symmetrical(*c)]