2017-08-11 11 views
1

の最頻値で他にfillna発生した場合、私はパンダのデータフレームFillna最も頻繁には列全体

 City State 
0 Cambridge MA 
1   NaN DC 
2  Boston MA 
3 Washignton DC 
4   NaN MA 
5  Tampa FL 
6  Danvers MA 
7  Miami FL 
8 Cambridge MA 
9  Miami FL 
10   NaN FL 
11 Washington DC 

を持って、私は状態はので、私の前に現れた場合、最も頻度の高い状態に基づいて、NaNを埋めるためにしたいです国家によるグループは、次のコード適用されます。

df['City'] = df.groupby('State').transform(lambda x:x.fillna(x.value_counts().idxmax())) 

上記のコードは、すべての州がされる出力の前に発生した場合のために働くの

  City State 
0 Cambridge MA 
1 Washignton DC 
2  Boston MA 
3 Washignton DC 
4 Cambridge MA 
5  Tampa FL 
6  Danvers MA 
7  Miami FL 
8 Cambridge MA 
9  Miami FL 
10  Miami FL 
11 Washington DC 
私はへの出力をしたい前に、データフレームが

  City State 
0 Cambridge MA 
1   NaN DC 
2  Boston MA 
3 Washignton DC 
4   NaN MA 
5  Tampa FL 
6  Danvers MA 
7  Miami FL 
8 Cambridge MA 
9  Miami FL 
10   NaN FL 
11 Washington DC 
12   NaN NY 

NYが発生したことがない場合、私は状態が発生したことがない場合は、その都市は、市全体の列IEで最も頻繁になるようにcondtionを追加したいが

  City State 
0 Cambridge MA 
1 Washignton DC 
2  Boston MA 
3 Washignton DC 
4 Cambridge MA 
5  Tampa FL 
6  Danvers MA 
7  Miami FL 
8 Cambridge MA 
9  Miami FL 
10  Miami FL 
11 Washington DC 
12 Cambridge NY 

上記のコードでは、とValueErrorを与えること:(「空のシーケンスのARGMAXを取得しよう」)「NY」が前に起こったことはないので。

答えて

0

mode = df['City'].mode()[0] 
df['City'] = df.groupby('State')['City'].apply(lambda x: x.fillna(x.value_counts().idxmax() if x.value_counts().max() >=1 else mode , inplace = False)) 
df['City']= df['City'].fillna(df['City'].value_counts().idxmax()) 

出力:

  City State 
0 Cambridge MA 
1 Washignton DC 
2  Boston MA 
3 Washignton DC 
4 Cambridge MA 
5  Tampa FL 
6  Danvers MA 
7  Miami FL 
8 Cambridge MA 
9  Miami FL 
10  Miami FL 
11 Washington DC 
12 Cambridge NY 
0

IIUC:

def f(x): 
    if x.count()<=0: 
     return np.nan 
    return x.value_counts().index[0] 

df['City'] = df.groupby('State')['City'].transform(f) 

df['City'] = df['City'].fillna(df['City'].value_counts().idxmax()) 

出力:あなたは、次のコードでこの問題を解決することができます

  City State 
0 Cambridge MA 
1 Washignton DC 
2 Cambridge MA 
3 Washignton DC 
4 Cambridge MA 
5  Miami FL 
6 Cambridge MA 
7  Miami FL 
8 Cambridge MA 
9  Miami FL 
10  Miami FL 
11 Washignton DC 
12 Cambridge NY 
+0

@AyaAbdelsalamはこの答えによってあなたを助けましたか? –

関連する問題