Skip to main content
 首页 » 编程设计

python之Pandas 将 if-then 语句应用于矩阵 df

2025年05月04日16cyq1162

给定以下 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