我想根据A列中的值是true还是false来将一列分为两个单独的列。
示例:
A X
True 3
False 6
True 2
False 4
A Y Z
True 3
False 6
True 2
False 4
我已经在网上找到了有关字符串操作的示例,但是我正在使用整数。
我可以通过df [Y] + df [Z]合并列,但是找不到拆分它们的方法。
答案 0 :(得分:1)
使用双numpy.where
:
df['Y'] = np.where(df.A, df.X, np.nan)
df['Z'] = np.where(~df.A, df.X, np.nan)
df['Y'] = df.X.where(df.A)
df['Z'] = df.X.mask(df.A)
print (df)
A X Y Z
0 True 3 3.0 NaN
1 False 6 NaN 6.0
2 True 2 2.0 NaN
3 False 4 NaN 4.0
或将()
与numpy.select
一起作为掩码:
df['Y'], df['Z'] = np.select([(df.A, ~df.A)], [df.X], default=np.nan)
print (df)
A X Y Z
0 True 3 3.0 NaN
1 False 6 NaN 6.0
2 True 2 2.0 NaN
3 False 4 NaN 4.0
如果要使用空字符串,请将NaN
更改为''
,但是如果需要进行下一步处理,则会失败:
df['Y'], df['Z'] = np.select([(df.A, ~df.A)], [df.X], default='')
或者:
df['Y'] = np.where(df.A, df.X, '')
df['Z'] = np.where(~df.A, df.X, '')
print (df)
A X Y Z
0 True 3 3
1 False 6 6
2 True 2 2
3 False 4 4
答案 1 :(得分:0)
df['Y'] = df['X'][df['A']==True]
df['Z'] = df['X'][df['A']==False]