[英]Forward Fill Pandas Dataframe Horizontally (along rows) without forward filling last value in each row
[英]Pandas: Forward Fill without Filling trailing NaNs
我有一個數據框,其中每一列都是不同長度的時間序列。 因此,在時間序列中的值之間以及在每個時間序列的末尾都保存一列的值都缺失。 我想填寫值之間的缺失值,但不填寫“尾隨” NaN
使用df = df.fillna(method='ffill')
可以幫助我解決大部分問題,但可以填寫尾隨的NaN,這是我所不希望的,因為數據的結尾對我的分析實際上很重要。
編輯:
我想轉一下:
ERICB SS Equity DCI US Equity FLEX US Equity
date
2008-02-14 8.026 NaN NaN
2008-02-18 NaN NaN 1.472
2008-02-19 8.074 NaN NaN
2008-02-22 NaN NaN 1.532
2008-02-25 8.062 NaN NaN
2008-03-03 8.100 NaN NaN
2008-03-06 8.100 NaN 1.955
2008-03-07 8.100 NaN NaN
2010-12-30 5.431 NaN NaN
2010-12-31 5.422 NaN NaN
2011-01-03 5.422 NaN NaN
2011-01-04 5.373 NaN NaN
變成這個:
ERICB SS Equity DCI US Equity FLEX US Equity
date
2008-02-14 8.026 NaN NaN
2008-02-18 8.026 NaN 1.472
2008-02-19 8.074 NaN 1.472
2008-02-22 8.074 NaN 1.532
2008-02-25 8.062 NaN 1.532
2008-03-03 8.100 NaN 1.532
2008-03-06 8.100 NaN 1.955
2008-03-07 8.100 NaN NaN
2010-12-30 5.431 NaN NaN
2010-12-31 5.422 NaN NaN
2011-01-03 5.422 NaN NaN
2011-01-04 5.373 NaN NaN
因此,它是前向填充的,但是僅當將來有一些非空值要填充時才保留,而尾隨為空。
一種方法是填充,使所有上一個非NaN值之前的內容都變為非NaN,然后使用where
選擇ffill()結果:
In [45]: df.ffill().where(df.bfill().notnull())
Out[45]:
date ERICB SS Equity DCI US Equity FLEX US Equity
0 2008-02-14 8.026 NaN NaN
1 2008-02-18 8.026 NaN 1.472
2 2008-02-19 8.074 NaN 1.472
3 2008-02-22 8.074 NaN 1.532
4 2008-02-25 8.062 NaN 1.532
5 2008-03-03 8.100 NaN 1.532
6 2008-03-06 8.100 NaN 1.955
7 2008-03-07 8.100 NaN NaN
8 2010-12-30 5.431 NaN NaN
9 2010-12-31 5.422 NaN NaN
10 2011-01-03 5.422 NaN NaN
11 2011-01-04 5.373 NaN NaN
另一個方法是直接為所有值(包括最后一個有效值)制作一個包含True的掩碼:
df.ffill().where(df.notnull().iloc[::-1].cummax().iloc[::-1])
需要.iloc[::-1]
地方,因為我找不到更好的方法來進行從下到上的累積操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.