Python 大熊猫的特征杂交

Python 大熊猫的特征杂交,python,pandas,Python,Pandas,我在DF中有两列: col_A col_B 0 1 0 0 0 1 0 1 1 0 1 0 1 1 我想为col_a和col_B组合的每个值创建一个新列,类似于get_dummies,但唯一的变化是我尝试使用列的组合 示例OP-在该列中,列A的值为0,列B的值为1: col_A_0_col_B_1 1 0 1 1 0 0

我在DF中有两列:

col_A     col_B
 0         1
 0         0
 0         1
 0         1
 1         0
 1         0
 1         1
我想为col_a和col_B组合的每个值创建一个新列,类似于get_dummies,但唯一的变化是我尝试使用列的组合

示例OP-在该列中,列A的值为0,列B的值为1:

col_A_0_col_B_1

   1
   0
   1
   1
   0
   0
   0
我目前正在使用iterrows迭代每一行来检查值,然后进行更改


是否有一个通常的方法来实现这一点

首先创建列并赋值,例如0表示False

df['col_A_0_col_B_1']=0

然后使用loc,您可以根据col_A==0和col_B==1进行过滤,然后将1分配给新列
df.loc[df.col_A==0&df.col_B==1,'col_A_0_col_B_1']=1

首先创建列并赋值,例如0表示False

df['col_A_0_col_B_1']=0

然后使用loc,您可以根据col_A==0和col_B==1进行过滤,然后将1分配给新列
df.loc[df.col_A==0&df.col_B==1,'col_A_0_col_B_1']=1

如果我理解正确,您可以这样做:

import pandas as pd
data = [[0, 1],
        [0, 0],
        [0, 1],
        [0, 1],
        [1, 0],
        [1, 0],
        [1, 1]]

df = pd.DataFrame(data=data, columns=['col_A', 'col_B'])
df['col_A_0_col_B_1'] = pd.Series([a == 0 and b == 1 for a, b in zip(df.col_A, df.col_B)], dtype='uint')
print(df)
输出

或作为替代方案:

df = pd.DataFrame(data=data, columns=['col_A', 'col_B'])
df['col_A_0_col_B_1'] = pd.Series((df.col_A == 0) & (df.col_B == 1), dtype='uint')
print(df)

如果我理解正确,你可以这样做:

import pandas as pd
data = [[0, 1],
        [0, 0],
        [0, 1],
        [0, 1],
        [1, 0],
        [1, 0],
        [1, 1]]

df = pd.DataFrame(data=data, columns=['col_A', 'col_B'])
df['col_A_0_col_B_1'] = pd.Series([a == 0 and b == 1 for a, b in zip(df.col_A, df.col_B)], dtype='uint')
print(df)
输出

或作为替代方案:

df = pd.DataFrame(data=data, columns=['col_A', 'col_B'])
df['col_A_0_col_B_1'] = pd.Series((df.col_A == 0) & (df.col_B == 1), dtype='uint')
print(df)
你可以用np.where

你可以用np.where


将链接布尔掩码转换为整数:

df['col_A_0_col_B_1'] = ((df['col_A']==0)&(df['col_B']==1)).astype(int)
为了获得更好的性能:

df['col_A_0_col_B_1'] = ((df['col_A'].values==0)&(df['col_B'].values==1)).astype(int)
性能:取决于行数和0,1值:


将链接布尔掩码转换为整数:

df['col_A_0_col_B_1'] = ((df['col_A']==0)&(df['col_B']==1)).astype(int)
为了获得更好的性能:

df['col_A_0_col_B_1'] = ((df['col_A'].values==0)&(df['col_B'].values==1)).astype(int)
性能:取决于行数和0,1值:

您可以使用pandas~表示布尔值not,1和0表示true和false

df['col_A_0_col_B_1'] = ~df['col_A'] & df['col_B']
您可以使用pandas~表示布尔值not,1和0表示true和false

df['col_A_0_col_B_1'] = ~df['col_A'] & df['col_B']