将具有布尔值的列组组合以创建多个新列

问题描述

我想知道如何通过在数据框中将两组乘以旧列来创建新列。所以如果我有[A,B]和[X,Y]:

   A     B      X     Y
0  True  False  True  False

现在,我希望这会导致增加4列,其中只有两个都为true的列才是true:

   A     B      X     Y      AX     BX      AY     BY
0  True  False  True  False  True   False   False  False   

在我的情况下,组更大,因此我正在寻找一种可以通过使用列标题[A,B]和[X,Y]的两个列表使用的解决方案。我已经尝试过列表理解,但是我无法使它起作用:-(

解决方法

使用itertools.product获取列名称的笛卡尔乘积,然后在列表推导内使用Series.mul创建相应的列乘积,最后使用pd.concat将这些乘积与{{1} }:

df

结果:

from itertools import product

l1,l2 = ['A','B'],['X','Y']

c = [df[a].mul(df[b]).rename(''.join([a,b])) for a,b in product(l1,l2)]
df = pd.concat([df] + c,axis=1)