Ich habe einen Datenrahmen mit zwei Spalten ProductID
und Balance
. Einige Balance
Spalten haben values =0 (df['Balance']=0)
. Mein Datenrahmen enthält verschiedene Produkte:Python Keyerror mit Datenframe loc und gelten Lambda
Index ProductID Balance
1 10 100
**2 20 0**
3 30 200
**4 20 150
5 20 240**
6 40 100
7 30 200
ich den Nullabgleich bei Index 2 mit einem durchschnittlichen Guthaben auf den product ID=20 ((0 +150 + 240)/3 =130)
basierend zurechnen will.
Ich bin mit dem folgenden Code:
Zuerst bekommen die
balance_average
basierend auf dem ProductID:balance_average = df.pivot_table(values='Balance', index='ProductID')
Identifizierung der Nullabgleich Reihen:
zero_bool = (df['Balance'] == 0)
Anwendung balance_average:
df.loc[zero_bool, 'Balance'] = df.loc[zero_bool, 'ProductID'].apply(lambda x: balance_average[x])
Wenn ich den Code oben in Python ausführen 3.6 Ich bin KeyError: '20'
bekommen. 20 ist die entsprechende ProductID der ersten Nullbilanzsäule. Kann mir jemand sagen, was mit dem obigen Code nicht stimmt?
versucht, den Code unten, noch KeyError bekommen: 20. zero_bool = (df ['Balance'] == 0) balance_average = df.pivot_table (Werte = 'Balance', index = 'ProductID'), balance_average_dict = balance_average.to_dict(), df.loc [zero_bool, 'Balance '] = df.loc [zero_bool,' ProductID ']. apply (Lambda x: balance_average_dict [x]) – mnr