三元表达式依赖于两列

Mic*_*ael 1 python pandas

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

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]})
Run Code Online (Sandbox Code Playgroud)

赠送:

   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
Run Code Online (Sandbox Code Playgroud)

我想要做的是在"值"中将所有大于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
Run Code Online (Sandbox Code Playgroud)

我一直在使用代码:

 DF.Value = [0 if x > 5 else x for x in DF.Value] 
Run Code Online (Sandbox Code Playgroud)

如果它们> 5,那么显然会将所有值更改为0.我尝试在此代码中添加内容,例如:

  DF.Value = [0 if x > 5 in DF.value and x > 5 in DF.Time else x for x in DF.Value]
Run Code Online (Sandbox Code Playgroud)

但我似乎无法得到正确的单词/代码组合来产生我想要的东西.有什么建议?谢谢.

rya*_*nmc 5

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

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

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

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

只需添加"|"然后写下您的下一个条件.