三元表达式依赖于两列

时间:2015-09-30 16:27:44

标签: 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]})

,并提供:

   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]

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

1 个答案:

答案 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;然后写下你的下一个条件。