假设我们有一个类似于的数据集:
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)
但我似乎无法得到正确的单词/代码组合来产生我想要的东西.有什么建议?谢谢.
我发现在这些情况下使用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)
只需添加"|"然后写下您的下一个条件.