shift()列向下移动,但是否用以前的值替换nan条目?

zfciruhq  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(187)

好的,这应该很简单。我向下移动一列,只需要用前面的值填充结果nan。我该怎么做?

>>> df1 = pd.DataFrame({ 'time_id': [5,5,5,5,5,5,5,5,11,11,11,11,11,11,11,11],
...                        'A': [1,2,4,5,7,9,11,12,2,3,4,5,8,12,13,14],
...                        'B': [randint(1, 99)*10 for x in range(16)],
...                        'C': [randint(1, 99)*100 for x in range(16)]})
>>> df1
    time_id   A    B     C
0         5   1  610  9400
1         5   2  250  4600
2         5   4  350  9200
3         5   5  100  6700
4         5   7  110  6400
5         5   9  220  7100
6         5  11  200   800
7         5  12  580  7200
8        11   2  700  1100
9        11   3  770  4700
10       11   4  170  3700
11       11   5  900  2500
12       11   8  730  8800
13       11  12  940  2600
14       11  13  740  2700
15       11  14  790  4800
>>> df1['C_prev'] = df1.groupby(['time_id'])['C'].shift(1)
>>> df1
    time_id   A    B     C  C_prev
0         5   1  610  9400     NaN
1         5   2  250  4600  9400.0
2         5   4  350  9200  4600.0
3         5   5  100  6700  9200.0
4         5   7  110  6400  6700.0
5         5   9  220  7100  6400.0
6         5  11  200   800  7100.0
7         5  12  580  7200   800.0
8        11   2  700  1100     NaN
9        11   3  770  4700  1100.0
10       11   4  170  3700  4700.0
11       11   5  900  2500  3700.0
12       11   8  730  8800  2500.0
13       11  12  940  2600  8800.0
14       11  13  740  2700  2600.0
15       11  14  790  4800  2700.0

i、 e.第一个nan应该只重复第一个值9400,同样,下一列(因为它们是按时间_id分组的)应该用1100填充其nan。
谢谢你的帮助!

isr3a4wc

isr3a4wc1#

您可以使用interpolate()

df.C_prev.interpolate(method = 'backfill', limit_direction = 'backward')

相关问题