考虑这个数据帧:

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

我尝试了difference和boolean列的组合,但是它没有提供任何离开二进制方法的权限

最佳答案

首先,设定你的条件:

prev = df.Score.shift(-1)
c1, c2, c3 = df.Score.lt(prev), df.Score.eq(prev), df.Score.gt(prev)

现在使用numpy.select
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时才有效):
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

关于python - 在 Pandas 中创建具有0、1、0.5值而不是 bool 值的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52705982/

10-12 22:03