考虑这个数据帧:
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/