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