Skip to main content
 首页 » 编程设计

python之依赖于两列的三元表达式

2025年05月04日34arxive

假设我们有一个类似于以下的数据集:

DF = pd.DataFrame({'Time':[1,2,3,4,5,6,7,8,9,10],'Value': [1,3,5,5,6,8,9,5,6,7]}) 

给予:

   Time  Value 
0     1      1 
1     2      3 
2     3      5 
3     4      5 
4     5      6 
5     6      8 
6     7      9 
7     8      4 
8     9      6 
9    10      7 

我想做的是在“值”中将所有大于 5 的值设置为等于 0,但仅当“时间”大于 5 时才如此。最终产品将是:

   Time  Value 
0     1      1 
1     2      3 
2     3      5 
3     4      5 
4     5      6 
5     6      0 
6     7      0 
7     8      4 
8     9      0 
9    10      0 

我一直在使用一个代码:

 DF.Value = [0 if x > 5 else x for x in DF.Value]  

这显然会将 所有 值更改为 0,如果它们大于 5。我尝试向这段代码中添加一些内容,例如:

  DF.Value = [0 if x > 5 in DF.value and x > 5 in DF.Time else x for x in DF.Value] 

但我似乎无法获得正确的单词/代码组合来产生我想要的结果。有什么建议么?谢谢。

请您参考如下方法:

我发现在这些情况下使用 numpy.where 很容易:

import numpy as np 
DF['Value'] = np.where((DF.Time > 5) & (DF.Value > 5),0,DF.Value) 

*要添加到此答案中,如果您想满足更多条件,可以将它们添加到上面的代码中,例如:

DF['Value'] = np.where((DF.Time > 500) & (DF.Value > 5) | (DF.Time > 5) & (DF.Value < 1),0,DF.Value) 

只需添加“|”,然后写下您的下一个条件。