2017-04-11 8 views
1

Ich versuche einige Zeilen mit 0s zu füllen, wenn eine bestimmte Bedingung zutrifft. Ich versuche:Pandas - fillna mit Teilmenge von Zeilen

df.loc[:,(df.Available == True) & (df.Intensity.isnull())].Intensity = df.loc[(df.Available == True) & (df.Intensity.isnull())].Intensity.fillna(0, inplace=True) 

Diese nicht bc IndexingError: Unalignable boolean Series key provided funktioniert, aber wenn ich versuche nur

df.loc[(df.Available == True) & (df.Intensity.isnull())].Intensity = df.loc[(df.Available == True) & (df.Intensity.isnull())].Intensity.fillna(0, inplace=True) 

, die als Aktualisierung eine Kopie registriert. Wie kann ich das machen? Vielen Dank!

Antwort

2

arbeiten sollte ich denken, dass Sie nicht einmal fillna brauchen wenn Sie bereits die Zeilen adressieren, deren Intensität Null ist.

df.loc[(df.Available) & (df.Intensity.isnull()), 'Intensity'] = 0 

Alternativ könnten Sie tun

df.loc[df.Available, 'Intensity'] = df.loc[df.Available, 'Intensity'].fillna(0) 
1

IIUC:

df.query('Available == True')['Intensity'].fillna(0) 
+1

Sie haben es wieder zuweisen. – piRSquared

1

brach ich diese in mehrere Linien zur besseren Lesbarkeit

a = df.Available == True 
b = df.Intensity.isnull() 
df.loc[(a & b), 'Intensity'] = 0 

Dies ist jedoch auch

a = df.Available == True 
b = df.Intensity.isnull() 
df.Intesity *= (a & b) 
Verwandte Themen