Return max von null oder einen Wert für ein pandas DataFrame Spalte
Möchte ich ersetzen Sie negative Werte in ein pandas DataFrame Spalte mit null.
Gibt es einen kürzeren Weg zum Bau dieser Ausdruck?
df['value'][df['value'] < 0] = 0
- Wie das aussieht, wie Sie es tun würde, in
numpy
... ich bezweifle es einen knapperen auf andere Weise, als zu brechen es in die 2 Aussagen. - Vielleicht so etwas wie
df['value'] = max((df['value'], 0))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist der übliche Weg, es zu tun, die zwar nicht unbedingt übersichtlicher, flexibler ist (Sie können diese anwenden, um beliebige Spalten)
np.maximum
wie vorgeschlagen, stackoverflow.com/a/33000983/1840471.Könnten Sie die clip Methode:
Erträge
np.inf
als das zweite argument. Standard ist None, was gleichbedeutend ist, in diesem Fall. Wenn Sie sich Gedanken über die Lesbarkeit mit verlassen der zweiten argument heraus, Sie könnte Verwendungdf.value.clip_lower(0)
statt.pandas.DataFrame.clip
benahm sich wienumpy
als gut. Ich habe nur gemerkt, dass es nicht (und Sie müssen nicht das zweite argument) über 5 Minuten! 🙂df
ist einpandas.DataFrame
,df['values']
ist einpandas.Series
, welche eine Unterklasse vonndarray
.clip
Methode ist anders (hat default-Parameter fürlower
undupper
), und es hat zusätzliche Methoden, wieclip_lower
undclip_upper
.numpy.clip
.numpy.clip
aber es füllt automatisch in die max-oder min-Grenzen mit der max-oder min-der Daten, wenn eine der Grenzen ist Links out: github.com/pydata/pandas/blob/master/pandas/core/... So weit wie ich kann sagen, dass der Fall für 0.10, wie gut.numpy.maximum
: stackoverflow.com/a/33000983/1840471.Andere Möglichkeit ist
numpy.maximum()
. Dies ist mehr straight-forward zu Lesen, meiner Meinung nach.Es ist auch deutlich schneller als alle anderen Methoden.
(notebook)
np.max != np.maximum
was macht diese schlechte mnemonicallyGREATEST
Namen zu unterscheiden.Nehmen wir nur Werte größer als null, so dass diejenigen, die negativ sind, die als NaN (arbeitet mit frames, die sich nicht mit der Serie), dann unterstellen.
Für die Vollständigkeit, die
np.where
ist auch eine Möglichkeit, das schneller als die meisten Antworten hier. Dienp.maximum
Antwort ist der beste Ansatz, wenn es, wie es ist schneller und präziser als dieses.df.value.clip_lower(0, inplace=True)
ist die prägnanteste, und ist nur etwa so schnell wienp.maximum
sicherlich schneller als andere Methoden hier (notebook).Oder
where
zu überprüfen: