2017-04-19 26 views
8

我期待採取了熊貓系列,並與平均的下一個數值,其中的填充NaN填寫的NaN只是不能找出如何在num劃分NaN選自S的filler柱(和下一個數值爲好):熊貓:<code>average = next numerical value/(# consecutive NaNs + 1)</code></p> <p>這裏是我的代碼,到目前爲止,我:有下一個非楠/#連續的NaN

import pandas as pd 

dates = pd.date_range(start = '1/1/2016',end = '1/12/2016', freq = 'D') 
nums = [10, 12, None, None, 39, 10, 11, None, None, None, None, 60] 

df = pd.DataFrame({ 
     'date':dates, 
     'num':nums 
     }) 

df['filler'] = df['num'].fillna(method = 'bfill') 

電流輸出:

  date num filler 
0 2016-01-01 10.0 10.0 
1 2016-01-02 12.0 12.0 
2 2016-01-03 NaN 39.0 
3 2016-01-04 NaN 39.0 
4 2016-01-05 39.0 39.0 
5 2016-01-06 10.0 10.0 
6 2016-01-07 11.0 11.0 
7 2016-01-08 NaN 60.0 
8 2016-01-09 NaN 60.0 
9 2016-01-10 NaN 60.0 
10 2016-01-11 NaN 60.0 
11 2016-01-12 60.0 60.0 

所需的輸出:

  date num 
0 2016-01-01 10.0 
1 2016-01-02 12.0 
2 2016-01-03 13.0 
3 2016-01-04 13.0 
4 2016-01-05 13.0 
5 2016-01-06 10.0 
6 2016-01-07 11.0 
7 2016-01-08 12.0 
8 2016-01-09 12.0 
9 2016-01-10 12.0 
10 2016-01-11 12.0 
11 2016-01-12 12.0 
+0

帶我嘗試了幾次......但我最終得到了:-) – piRSquared

回答

11
  • 採取反向的notnull
  • 使用cumsum,爲groupbytransformmean

csum = df.num.notnull()[::-1].cumsum() 
filler = df.num.fillna(0).groupby(csum).transform('mean') 
df.assign(filler=filler) 

     date num filler 
0 2016-01-01 10.0 10.0 
1 2016-01-02 12.0 12.0 
2 2016-01-03 NaN 13.0 
3 2016-01-04 NaN 13.0 
4 2016-01-05 39.0 13.0 
5 2016-01-06 10.0 10.0 
6 2016-01-07 11.0 11.0 
7 2016-01-08 NaN 12.0 
8 2016-01-09 NaN 12.0 
9 2016-01-10 NaN 12.0 
10 2016-01-11 NaN 12.0 
11 2016-01-12 60.0 12.0 

它是如何工作

  • df.num.notnull().cumsum()是找到連續空值的組的標準技術。不過,我希望我的羣組以下一個數值結束。所以我倒過來了,然後cumsum'd。
  • 我希望我的平均值包含空值的數量。最簡單的方法是填寫零,對我剛剛製作的小組採取正常的意思。
  • transform跨現有索引廣播
  • assign新欄目。儘管逆轉了這一系列,該指數將像魔術一樣重新調整。可以使用loc,但會覆蓋現有的df。我會讓OP決定如果他們想要覆蓋。
+0

hi @piRSquared:你可以看看這個問題嗎? http://stackoverflow.com/questions/43475370/how-to-merge-two-pandas-dataframes-or-transfer-values-by-comparing-ranges-of-v – everestial007

+0

就是這樣,一如既往地感謝。介意記下一個關於到底發生了什麼的快速彙報?我得到的第二條線......第一條和第三條都略微超過了我的頭。 – pshep123

+0

@ pshep123 blurbed – piRSquared

相關問題