熊猫有条不紊地调整整个栏目

时间:2017-10-10 09:38:50

标签: python pandas

我有以下数据框

     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,有没有人有一个很好的解决方案?

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