假设我们有一个类似于以下的数据集:
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)
只需添加“|”,然后写下您的下一个条件。
