Skip to main content
 首页 » 编程设计

python之pandas DataFrame 中的条件操作

2025年05月04日11pander-it

我有一个 Pandas 数据框,我想根据另一列中的值设置一列中的值。有 6 种可能的情况,因此单个 if/else 将不起作用。我无法将 If/else 的组合用于 SBT >=x 和 <=y 的场景。 以下是我试图在 Python 中重新创建的 Excel VBA 代码中的迭代宏。它向下移动每一行进行检查。我知道它在 Python 中效率更高。

If SBT > 3.6 Then 
ActiveCell.Offset(0, -1) = "2" 
ElseIf SBT >= 2.95 And SBT <= 3.6 Then 
ActiveCell.Offset(0, -1) = "3" 
ElseIf SBT >= 2.6 And SBT <= 2.95 Then 
ActiveCell.Offset(0, -1) = "4" 
ElseIf SBT >= 2.05 And SBT <= 2.6 Then 
ActiveCell.Offset(0, -1) = "5" 
ElseIf SBT >= 1.31 And SBT <= 2.05 Then 
ActiveCell.Offset(0, -1) = "6" 
ElseIf SBT < 1.31 Then 
ActiveCell.Offset(0, -1) = "7" 
Else 
End If 

我看过

np.where(a < 4, -1, 100) 

和

df['desired_output'] = df['data'].apply(lambda x: 'true' if x <= 2.5 else 'false') 

这些都是可行的选择吗?我该如何嵌套语句(特别是“在这些值之间”部分,或者是否有另一种更有效的方法? 以下数据片段 (SBT) 和预期结果 (SBTno)。

SBT   SBTn 
7.00    2 
1.28    7 
3.64    2 
2.97    3 
2.83    4 

请您参考如下方法:

这是cut的一种方式

s=pd.cut(df.SBT,bins=[0,1.31,2.05,2.6,2.95,3.6,np.Inf],labels=[7,6,5,4,3,2]) 
0    2 
1    7 
2    2 
3    3 
4    4 
df['SBTn']=s.astype(str)