2017-10-10 3 views
0

나는 다음과 같은 한 전체 열을 이동 dataframe팬더 조건부

 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 

I가 한 위치 'X'는 NaN이 아래 열에서 모든 값을 이동하고 싶습니다. 'year'와 '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 

I가 pd.shift (-1) 주위 해왔다 있지만, 전체 열 이동 :

는 이와 같이 보일 것이다 원하는 출력은 다음과 같다. NaN 값을 1 씩 뒤로 이동해야합니다. 누군가에게 좋은 해결책이 있습니까?

답변

2

여기

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 
세부

하나의 방법

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 

입니다

관련 문제