簡體   English   中英

熊貓:向前填充而不填充尾隨的NaN

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM