2016-03-24 14 views
-1

でNAを入力します。パンダは、次のデータフレームを考えるグループバリュー

import pandas as pd 
import numpy as np 
df = pd.DataFrame({'Site':['A','A','A','B','B','B','C','C','C'], 
        'Value':[np.nan,1,np.nan,np.nan,2,2,3,np.nan,3]}) 

df 

    Site Value 
0 A  NaN 
1 A  1.0 
2 A  NaN 
3 B  NaN 
4 B  2.0 
5 B  2.0 
6 C  3.0 
7 C  NaN 
8 C  3.0 

私がNaNは、最も一般的に値(中央値または実行することを意味し)サイトの値を記入したいと思います。望ましい結果は次のとおりです。事前に

Site Value 
0 A  1.0 
1 A  1.0 
2 A  1.0 
3 B  2.0 
4 B  2.0 
5 B  2.0 
6 C  3.0 
7 C  3.0 
8 C  3.0 

ありがとう!

更新:これは近いですが、何の葉巻:その結果

df['Value']=df.groupby(['Site'])['Value'].fillna(min) 

...

Site Value 
0 A <function amax at 0x108cf9048> 
1 A 1 
2 A <function amax at 0x108cf9048> 
3 B <function amax at 0x108cf9048> 
4 B 2 
5 B 2 
6 C 3 
7 C <function amax at 0x108cf9048> 
8 C 3 
+1

としてtransformを使用することはできませんあなたが見つけることができますここで答えてください:https://stackoverflow.com/questions/19966018/pandas-filling-missing-values-by-mean-in-each-group?rq=1 – dmb

答えて

1

あなたは答えhere

df['Value'] = df.groupby('Site').transform(lambda x: x.fillna(x.mean())) 


    Site Value 
0 A  1 
1 A  1 
2 A  1 
3 B  2 
4 B  2 
5 B  2 
6 C  3 
7 C  3 
8 C  3 
+0

df ['Value'] = df.groupby( 'Site')['Value'] transform(lambda x:x.fillna(x.max))) –

+0

これは、もちろん、次のように短縮することもできます: 'df.groupby( 'Site')。transform( 'mean')' – JohnE

関連する問題