我有一个数据集,如下所示:
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
谢谢
答案 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)