2017-05-26 5 views
0

データフレーム内のいくつかのNaN値を修正しようとしています。私の計画は、他の2つの関連する列(aとb)を使用して行をグループ化し、列cの最も頻繁でないNaN値を各グループで調べ、その列を使用して、グループ。groupbyから最適な選択でNaNを素早く埋める方法

以下のコードは動作しますが、非常に遅いです。約3百万行のデータフレームで数時間動作しています。

これを行う方法に関する提案はありますか? mode方法に建て

def fillna_with_best(x): 
    m = mode(x['c']) 
    if m.count[0] > 0: 
     x['c'].fillna(m.mode[0], inplace=True) 
    return x 

df = df.groupby(['a', 'b']).apply(lambda x: fillna_with_best(x)) 

答えて

1

あなたが試みることができるSeries年代:

df['c'] = df.c.groupby([df.a, df.b]).transform(lambda x: x.fillna(x.mode().iat[0])) 
関連する問題