2017-08-11 3 views
1

ich einen Panda DatenrahmenFillna mit häufig meisten, wenn am häufigsten auftreten, sonst fillna mit häufigster Wert der gesamten Spalte

 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 

ich NaNs füllen basierend auf häufigste Zustand will, wenn der Zustand vor, so erscheint I den folgenden Code Gruppe von Staat und anwenden:

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

der obige Code funktioniert für, wenn alle Staaten vor der Ausgabe aufgetreten sind, wird

  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 

Jedoch habe ich eine condtion hinzufügen möchten, so dass, wenn ein Staat nie seine Stadt auftreten wird am häufigsten in der gesamten Stadt Spalte dh, wenn der Datenrahmen

  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 aufgetreten ist nie ist, bevor ich Ausgang wollen sein

  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 

der obige Code gibt einen Valueerror: (‚Versuch argmax einer leeren Sequenz zu erhalten‘), weil „NY“ noch nie aufgetreten.

Antwort

0

du

durch den folgenden Code lösen kann
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()) 

Ausgang:

  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()) 

Ausgang:

  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 hat diese Antwort Ihnen geholfen? –

Verwandte Themen