Python 大熊猫的特征杂交
我在DF中有两列: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
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']