如何根据另一列的值拆分数字列?

时间:2019-11-19 11:58:48

标签: python pandas

我想根据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]合并列,但是找不到拆分它们的方法。

2 个答案:

答案 0 :(得分:1)

使用双numpy.where

df['Y'] = np.where(df.A, df.X, np.nan)
df['Z'] = np.where(~df.A, df.X, np.nan)

Series.whereSeries.mask

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]