我正在尝试在 dataframe 中创建所有可能的唯一列组合。因此,具有 A、B、C 和 D 列,组合将是AB、AC、AD、BC、BD、ABC、ABD。
A B C D AB AC AD ...
1 1 3 2 2 4 3
为此,我创建了一个 for 循环:
for i, comb in enumerate(df_p.columns):
for comb2 in df_p.columns[i:]:
if (comb != comb2) & (comb not in comb2)):
df_p[comb + ' + ' + comb2] = df_p[comb].astype('str') + ' + ' + df_p[comb2].astype("str")
print(" comb: " + comb + " combines with comb2: " + comb2)
基本上,“comb”迭代器从第一列 (A) 开始,第二个迭代器“comb2”从第二列 (B) 开始,创建 AB,然后继续直到创建所有 A 组合。然后,当 comb 到 B 时,comb2 从 C 开始,依此类推。if 条件阻止了 A + A 以及 A + BA 之类的事情(我在 df 中用更多的列测试它时遇到了一些错误)。
我现在的问题是关于反向重复项,比如当迭代器一位于字母 A 时创建“ABD”(并且迭代器二将它与所有列组合)以及当迭代器一位于 D 时创建“DBA”而迭代器二完成所有操作组合。
在我的研究中,我也尝试过使用 itertools 组合,如下所示:set(itertools.combinations(df_p.columns, 2))对于 2 的组合,对于其他所有可能的组合,依此类推,但是后来我遇到了麻烦“映射”新创建的列组合(如 AB)与行值我原来的 df(对于这个例子,这将是 A 的行值 + B 的行值)。
我更喜欢 itertools 选项,因为它可以更好地控制我们想要的组合数量,而且可能不难映射。有什么想法吗?
提前致谢。
动漫人物
暮色呼如
相关分类