2017-04-19 7 views
8

とNaNを記入ちょうどnumNaNのうちfillerカラム(及び同様に次の数値)を分割する方法を見つけ出すことができない。パンダ:<code>average = next numerical value/(# consecutive NaNs + 1)</code></p> <p>は、ここで私は、これまでの私のコードです:私はパンダシリーズを取ると、次の数値ところ、平均で<code>NaN</code>を埋めるために探しています次の非NaNで/#連続し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
  • groupbymean

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 
transformcumsumその使用
  • notnullの逆を取ります

    それは

    • df.num.notnull().cumsum()をどのように動作するかは、連続したヌルのグループを検索するための標準的な手法です。しかし、私はグループが次の数値で終わってほしいと思っていました。だからシリーズを逆転してcumsum 'd。
    • 平均にヌル数を含めたいと考えています。それを行う最も簡単な方法は、私が作ったグループに対して、ゼロで満たし、正常な平均を取ることです。
    • transform既存のインデックスにブロードキャストする
    • assign新しい列。シリーズを逆転させたにもかかわらず、指数は魔法のように再編成されます。 locを使用できましたが、それは既存のdfを上書きします。彼らが望むなら、私はOPが上書きすることを決定します。
    +0

    こんにちは@piRSquared:この問題を見ていただけますか? http://stackoverflow.com/questions/43475370/how-to-merge-two-pandas-dataframes-or-transfer-values-by-comparing-ranges-of-v – everestial007

    +0

    これは、いつものようにありがとうございます。そこに起こっていることについてのすばらしい宣伝を書き留めて心に留めていますか?私が得た第2のライン...第1と第3のラインは私の頭の少し上です。 – pshep123

    +0

    @ pshep123 blurbed – piRSquared

    関連する問題

     関連する問題