给定以下 df:
Name Id v1 v2 v3 ...
A 1 1 3 5 ...
B 2 2 4 6 ...
我想对 v1 到 v3 列应用这些条件...:
如果值 <= 2 则 a
如果 2< 值 <= 5 那么 b
如果值 > 5 则 c
Name Id v1 v2 v3 ...
A 1 a b b ...
B 2 a b c ...
我会使用像 df[v1] = np.where(df[v1] <= 2, a, np.where(df[v1] <= 5, b, c)) 这样的东西,然后对 df 重复同样的操作[v2] df[v3]...有没有更有效的方法来处理这个问题?
请您参考如下方法:
选项 1
使用 np.where 是正确的,但您可以一次设置所有内容,而不是一次设置一列。
v = df.iloc[:, 2:].values
df.iloc[:, 2:] = np.where(
v <= 2, 'a', np.where((2 < v) & (v <= 5), 'b', 'c')
)
df
Name Id v1 v2 v3
0 A 1 a b b
1 B 2 a b c
选项 2
如果你喜欢冒险,还有 np.select -
df.iloc[:, 2:] = np.select([v <= 2, (2 < v) & (v <= 5)], ['a', 'b'], default='c')
df
Name Id v1 v2 v3
0 A 1 a b b
1 B 2 a b c
