创建新列并在其中填充布尔值-Python

时间:2019-11-11 06:31:03

标签: python-3.x pandas

我有一个数据集,如下所示:

A 	B	C	 Location 
10	15	15	South 
11	12	42	North
20	13	36	South 
15	30	40	West
10	40	20	East
15	20	10	South 
45	45	23	North 
12	12	12	West 
2	0	1	East 

我想创建一个新列,根据A和B和C <= 16的情况打印True或false。

我尝试做:

for rows in df.rows:

df['Purity'] = np.where((A <= 16 and B<=16 and C<=16), 'True', 'False')

但这不会为每个行单元格填充一个单独的值,但会填充列的所有单元格中的第一个值。

我希望得到的结果是:

A 	B	C   Location  Purity 
10	15	15	South 	TRUE
11	12	42	North	FALSE
20	13	36	South 	FALSE
15	30	40	West	FALSE
10	40	20	East	FALSE
15	20	10	South 	FALSE
45	45	23	North 	FALSE
12	12	12	West 	TRUE
2	0	1	East 	TRUE

谢谢

1 个答案:

答案 0 :(得分:1)

如果需要根据条件设置新的字符串值,请使用&进行带括号的按位与运算:

df['Purity'] = np.where((df.A <= 16) & (df.B<=16) & (df.C<=16), 'TRUE', 'FALSE')

如果要设置布尔值True和False,则设置链接的掩码:

df['Purity'] = (df.A <= 16) & (df.B<=16) & (df.C<=16)

是什么意思?

df['Purity'] = np.where((df.A <= 16) & (df.B<=16) & (df.C<=16), True, False)

另一种想法是将所有列进行比较,如果每行所有True,则使用DataFrame.all

df['Purity'] = (df[['A','B','C']] <= 16).all(axis=1)