Python 创建值为0,1,0.5而不是布尔值的列

Python 创建值为0,1,0.5而不是布尔值的列,python,python-3.x,pandas,Python,Python 3.x,Pandas,考虑这个数据帧: id Name Score 314 John 100 345 Sara 200 355 Zack 200 333 Harry 50 334 Chad 50 331 Newton 100 我想根据分数为新的运算符列指定自定义值,因此如果一个分数小于下一个分数,则为1,如果大于0,如果保持不变,则为0.5。这就是我想要的样子: id Name Score Operator 314 John 10

考虑这个数据帧:

id   Name   Score   
314  John    100    
345  Sara    200
355  Zack    200
333  Harry    50
334  Chad     50
331  Newton  100
我想根据分数为新的运算符列指定自定义值,因此如果一个分数小于下一个分数,则为1,如果大于0,如果保持不变,则为0.5。这就是我想要的样子:

id   Name   Score  Operator
314  John    100      1
345  Sara    200     0.5
355  Zack    200      0
333  Harry    50     0.5
334  Chad     50      1    
331  Newton  100     NAN

我尝试了差分列和布尔列的组合,但它不提供任何脱离二进制方法的访问权限。首先,设置您的条件:

prev = df.Score.shift(-1)
c1, c2, c3 = df.Score.lt(prev), df.Score.eq(prev), df.Score.gt(prev)
现在使用
numpy。选择

out = df.assign(out=np.select([c1, c2, c3], [1, 0.5, 0], np.nan))

    id    Name  Score  out
0  314    John    100  1.0
1  345    Sara    200  0.5
2  355    Zack    200  0.0
3  333   Harry     50  0.5
4  334    Chad     50  1.0
5  331  Newton    100  NaN

这里有另一个只是为了好玩的解决方案(只有当您的差异从未小于
0.5
)时才有效:


有没有参考资料来学习这些操作?我尝试了大量的熊猫书籍,但它们都提供了非常基本的介绍,我个人更依赖于文档。但是我也从SO
df.assign(m=[0 if x>y else 1 if xthanks man)中学到了很多,你知道像这样的详细操作有什么参考吗?我只使用了if-else语句。看看它。你已经知道if-else语句了,逻辑是
this if-TRUE-else-that
df.Score.diff(-1).mul(-1).add(0.5).clip(0, 1)
0    1.0
1    0.5
2    0.0
3    0.5
4    1.0
5    NaN
Name: Score, dtype: float64