2017-10-17 1 views
0

의 특정 컬럼의 이전 값과 NaN을 채우다음과 같이 내가 팬더의 dataframe이 파이썬

DF = NaN의의 각각에 대해

     open  high  low  close 
Timestamp              
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753 
2014-01-07 13:19:00  NaN  NaN  NaN  NaN 
2014-01-07 13:20:00  NaN  NaN  NaN  NaN 
2014-01-07 13:21:00 883.23085 883.23085 874.48165 874.48165 
2014-01-07 13:22:00  NaN  NaN  NaN  NaN 

, 그들은 이전의 값을 취한다 기간 마감.

편집 : df.fillna (메서드 = 'ffill')를 사용하여 시도했지만 각 NaN이 바로 위의 값을 가져옵니다. 각 NaN이 전에 Close의 값만 가져 오라고합니다.

사용 ffill 수율 :

     open  high  low  close 
Timestamp              
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753 
2014-01-07 13:19:00 874.67040 892.06753 874.67040 892.06753 

하지만 찾고 있어요 : 방법

     open  high  low  close 
Timestamp              
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753 
2014-01-07 13:19:00 892.06753 892.06753 892.06753 892.06753 
+0

그리고 무엇이 문제입니까? 너는 그것을 해결하려고 무엇을 했는가? – Julien

+0

편집 된 원본 게시물 – Adam

+0

@ Vaishali, @ ASGM 이것은 정확한 복제는 아니지만 ... 솔루션은 루프를 사용하여 2 줄의 코드가 될 수 있습니다 ... – Julien

답변

2

커플 :

In [3166]: df.apply(lambda x: x.fillna(df.close.shift())).ffill() 
Out[3166]: 
          open  high  low  close 
Timestamp 
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753 
2014-01-07 13:19:00 892.06753 892.06753 892.06753 892.06753 
2014-01-07 13:20:00 892.06753 892.06753 892.06753 892.06753 
2014-01-07 13:21:00 883.23085 883.23085 874.48165 874.48165 
2014-01-07 13:22:00 874.48165 874.48165 874.48165 874.48165 

In [3167]: df.fillna({c: df.close.shift() for c in df}).ffill() 
Out[3167]: 
          open  high  low  close 
Timestamp 
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753 
2014-01-07 13:19:00 892.06753 892.06753 892.06753 892.06753 
2014-01-07 13:20:00 892.06753 892.06753 892.06753 892.06753 
2014-01-07 13:21:00 883.23085 883.23085 874.48165 874.48165 
2014-01-07 13:22:00 874.48165 874.48165 874.48165 874.48165 
0

는 CA n 축을 닫은 다음 나머지를 축 1에 다시 채우십시오.

df.close.fillna(method='ffill', inplace=True) 
df.fillna(method='backfill', axis=1, inpace=True)