好的,这应该很简单。我向下移动一列,只需要用前面的值填充结果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。
谢谢你的帮助!
1条答案
按热度按时间isr3a4wc1#
您可以使用interpolate()