这可能很简单,但是由于某些原因,我想不出解决它的好方法。
所以,假设这是我的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
任何帮助将不胜感激!
答案 0 :(得分:3)
您也可以将where
与diff
一起使用
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