我有下面的代码,用于创建数据帧中列的所有可能组合。
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)。
答案 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)]