2016-05-11 9 views
1

私はデータベースをグループ化するために使用しているいくつかの列を持つデータセットを持っています。いくつかの欠損値を持つ同じデータセット内のいくつかの数値列があります。私は欠けている項目があるグループの平均で列の欠けている値を記入したいと思います。グループ化されたオブジェクトに基づいてデータフレームに不足しているデータを埋める方法は?

私はあなたが transformgroupbyを使用することができると思う
Name of Pandas dataset=data 
    Col on which groups would be based=['A','B'] 
    Col that needs to be imputed with group based means: ['C'] 
+0

その後、列 'C' の平均値である5.8とC列からNANを埋めますあなたは例を見せてもらえますか? – xwang

答えて

2

import pandas as pd 
import numpy as np 

df = pd.DataFrame([[1,1,3], 
        [1,1,9], 
        [1,1,np.nan], 
        [2,2,8], 
        [2,1,4], 
        [2,2,np.nan], 
        [2,2,5]] 
        , columns=list('ABC')) 
print df 
    A B C 
0 1 1 3.0 
1 1 1 9.0 
2 1 1 NaN 
3 2 2 8.0 
4 2 1 4.0 
5 2 2 NaN 
6 2 2 5.0 

df['C'] = df.groupby(['A', 'B'])['C'].transform(lambda x: x.fillna(x.mean())) 
print df 
    A B C 
0 1 1 3.0 
1 1 1 9.0 
2 1 1 6.0 
3 2 2 8.0 
4 2 1 4.0 
5 2 2 6.5 
6 2 2 5.0 
+0

これはそれが得られるほどエレガントです。ありがとうございました。 –

+0

私の答えが役に立ったら、[同意する](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。ありがとう。 – jezrael

0
[df[i].fillna(df[i].mean(),inplace=True) for i in df.columns ] 

これは

Output  
    print df 
     A B C 
    0 1 1 3.0 
    1 1 1 9.0 
    2 1 1 5.8 
    3 2 2 8.0 
    4 2 1 4.0 
    5 2 2 5.8 
    6 2 2 5.0 
+0

NaNを列平均で置き換えます。私はそれ以上のものが必要でした。 –

+0

ああ、今私はあなたが欲しいものを参照してください:)(それはjezraelから解き放されました) – 5nv

関連する問題