2016-11-28 4 views
7

Ich versuche einen maximalen Wert einer Pandas DataFrame Spalte zu setzen. Zum Beispiel:Pandas Dataframe: setze den maximalen Wert in Spalte

my_dict = {'a':[10,12,15,17,19,20]} 
df = pd.DataFrame(my_dict) 

df['a'].set_max(15) 

ergäbe:

a 
0 10 
1 12 
2 15 
3 15 
4 15 
5 15 

Aber es funktioniert nicht.

Es gibt eine Million Lösungen den Maximalwert finden, aber nichts zu gesetzt den Maximalwert ... zumindest, dass ich finden kann.

Ich könnte durch die Liste iterieren, aber ich vermute, es gibt einen schnelleren Weg, es mit Pandas zu tun. Meine Listen werden wesentlich länger sein, und daher würde ich erwarten, dass die Iteration relativ viel länger dauert. Außerdem möchte ich, dass jede Lösung mit NaN umgehen kann.

Vielen Dank im Voraus.

+0

Werfen Sie einen Blick auf die 'clip' Methode. –

Antwort

9

Ich nehme an, Sie tun können:

maxVal = 15 
df['a'].where(df['a'] <= maxVal, maxVal)  # where replace values with other when the 
               # condition is not satisfied 

#0 10 
#1 12 
#2 15 
#3 15 
#4 15 
#5 15 
#Name: a, dtype: int64 

Oder:

df['a'][df['a'] >= maxVal] = maxVal 
+1

Das ist es. Wusste, dass es etwas Einfaches gab, das ich vermisste. Danke Psidom. – pshep123

3

Sie können clip verwenden.

auf alle Spalten des Datenrahmens Nehmen:

df.clip(upper=15) 

Sonst wie gesehen here auf ausgewählte Spalten anwenden:

df.clip(upper=pd.Series({'a': 15}), axis=1) 
Verwandte Themen