python - 比较 panda 数据框中的值并返回新值

标签 python pandas

我有一个像这样的 Pandas 数据框:

         date        id      tier
0      2020-06-02    23      3
1      2020-06-02    23      2
2      2020-06-02    23      1
3      2020-06-02    7       3
23026  2020-06-20     7      3
41740  2020-07-07    9       3

我想从“tier”创建一个新列,如果以前的值与当前值相同或没有以前的值,则值为 0;如果以前的值大于当前值,则值为 1,并且 - 1 其他情况,如下所示:

         date        id      tier  move
0      2020-06-02    23      3      0
1      2020-06-02    23      2      1
2      2020-06-02    23      1      1
3      2020-06-02    23      3      -1
23026  2020-06-20     7      3       0
41740  2020-07-07    9       3       0

我主要尝试过 .shift() ,按照我的答案,但无济于事。当我这样做时:

if df['tier'].shift() < df['tier']:
  df['Movement'] = -1
elif df['tier'].shift() == df['tier']:
  df['Movement'] = 0
else:
  df['Movement'] = 1

它提示 DF 不是相同的形状“ValueError:操作数无法与形状 (78792,) (385,2) 一起广播” 但是只有一个 df 正在使用,不知道我的代码是否不好或者(385,2)来自哪里 谢谢!

最佳答案

使用numpy.select:

import numpy as np
conditions=[df['tier'].shift().fillna(df['tier']).eq(df['tier']),
            df['tier'].shift().fillna(df['tier']).gt(df['tier'])]
choices=[0,1]

df['move']=np.select(conditions, choices, default=-1)

输出:

df
             date  id  tier  move
0      2020-06-02  23     3     0
1      2020-06-02  23     2     1
2      2020-06-02  23     1     1
3      2020-06-02   7     3    -1
23026  2020-06-20   7     3     0
41740  2020-07-07   9     3     0

关于python - 比较 panda 数据框中的值并返回新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63379298/

相关文章:

python - 从 pandas 数据框中的行与行比较中提取数据

python - dropna 后 Nans 未删除

python - 尝试索引字符串列表并根据其索引删除字符串

python - 合并两个数据框并减少列数

Python 'map' 函数插入 NaN,是否可以返回原始值?

python - mysql python连接器Cursor是否执行插入带有%d的整数参数?

python - 在 Python 上使用回溯的子集总和

python - 如何在不组合行级别的情况下使用 Pandas 进行热编码

python 概率

python - scrapy可以在命令行上运行,但不能在sublime上运行