我有以下数据框
year dayofyear x
360 2014 361 109357.2798
361 2014 362 106484.6514
362 2014 363 112627.1748
363 2014 364 99750.2315
364 2014 365 56330.7660
365 2014 366 NaN
366 2015 1 60859.1082
367 2015 2 99507.1793
368 2015 3 92279.8554
369 2015 4 106590.6594
我想将列中的所有值都移到' x'在NaN下方向上一个位置。年中的价值观'和' dayofyear'应该保持不变。
因此,所需的输出如下:
year dayofyear x
360 2014 361 109357.2798
361 2014 362 106484.6514
362 2014 363 112627.1748
363 2014 364 99750.2315
364 2014 365 56330.7660
365 2014 366 60859.1082
366 2015 1 99507.1793
367 2015 2 92279.8554
368 2015 3 106590.6594
369 2015 4 NaN
我玩过pd.shift(-1),但这会改变整个专栏。我只需要将NaN以下的值向后移1,有没有人有一个很好的解决方案?
答案 0 :(得分:2)
这是单程
In [401]: s = df['x'].isnull()
In [403]: df.loc[s[s].index[0]:, 'x'] = df['x'].shift(-1)
In [404]: df
Out[404]:
year dayofyear x
360 2014 361 109357.2798
361 2014 362 106484.6514
362 2014 363 112627.1748
363 2014 364 99750.2315
364 2014 365 56330.7660
365 2014 366 60859.1082
366 2015 1 99507.1793
367 2015 2 92279.8554
368 2015 3 106590.6594
369 2015 4 NaN
详细
In [405]: s
Out[405]:
360 False
361 False
362 False
363 False
364 False
365 True
366 False
367 False
368 False
369 False
Name: x, dtype: bool
In [406]: s[s].index
Out[406]: Int64Index([365], dtype='int64')
In [407]: s[s].index[0]
Out[407]: 365