熊猫根据不同列中的先前值来获取价值

时间:2020-06-24 12:31:14

标签: python pandas

这可能很简单,但是由于某些原因,我想不出解决它的好方法。

所以,假设这是我的DataFrame:

     a    b 
0   99    3
1   99    56
2    1    7
3    1    80  
4    1    55
5    2    601
6    2    -4
7    1    33
8    1    22

我想创建一个新列c,其中值将是b的上一个值中a的最后一个值,因此输出应为:< / p>

     a    b      c
0   99    3     nan
1   99    56    nan
2    1    7     56
3    1    80    56  
4    1    55    56
5    2    601   55
6    2    -4    55
7    1    33    -4
8    1    22    -4

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

您也可以将wherediff一起使用


In [73]: df['b'].where(df['a'].diff(-1).ne(0)).shift().ffill()
Out[73]: 
0     NaN
1     NaN
2    56.0
3    56.0
4    56.0
5    55.0
6    55.0
7    -4.0
8    -4.0
Name: b, dtype: float64

In [74]: df['c'] = df['b'].where(df['a'].diff(-1).ne(0)).shift().ffill()

In [75]: df
Out[75]: 
    a    b     c
0  99    3   NaN
1  99   56   NaN
2   1    7  56.0
3   1   80  56.0
4   1   55  56.0
5   2  601  55.0
6   2   -4  55.0
7   3   33  -4.0
8   3   22  -4.0

答案 1 :(得分:1)

我将比较df['a']与它的偏移以识别值的变化,并将ffill()shift()

df['c'] = df.loc[df['a'] != df['a'].shift(-1),'b']
df['c'] = df['c'].ffill().shift()

输出:

    a    b     c
0  99    3   NaN
1  99   56   NaN
2   1    7  56.0
3   1   80  56.0
4   1   55  56.0
5   2  601  55.0
6   2   -4  55.0
7   1   33  -4.0
8   1   22  -4.0