2017-05-05 2 views
1

Sagen wir, ich habe eine einfache Datenrahmen:Wie können alle Werte von bestimmten eingeschlossenen oder ausgeschlossenen Spalten eines DataFrame basierend auf einer Bedingung verfälscht werden?

import pandas as pd 

df = pd.DataFrame.from_dict(
     { 
      'foo': [0.00, 0.31, 0.45], 
      'bar': [1.00, 0.55, 3.01], 
      'qux': [0.30, 4.10, 2.78] 
     }, 
     orient = 'index' 
    ) 

Hier ist sie:

 0  1  2 
qux 0.3 4.10 2.78 
foo 0.0 0.31 0.45 
bar 1.0 0.55 3.01 

ich alle Werte von weniger als 1 in den Datenrahmen zu einem anderen Wert ändern (0) auf diese Weise:

df[df < 1] = 0 

Daraus ergibt sich folgendes:

 0 1  2 
qux 0.0 4.1 2.78 
foo 0.0 0.0 0.00 
bar 1.0 0.0 3.01 

Wie könnte ich eine solche Änderung auf alle Spalten außer Spalte 2 anwenden? Dies würde dazu führen, die folgenden:

 0 1  2 
qux 0.0 4.1 2.78 
foo 0.0 0.0 0.45 
bar 1.0 0.0 3.01 
+0

Mögliche Duplikat von [Wie Ersetzen Sie alle Werte in allen Spalten in einem Pandas-Dataframe mit Bedingung] (http://stackoverflow.com/questions/27857475/how-to-replace-all-value-in-all-columns-in-a-pandas-dataframe- mit Zustand) – philshem

Antwort

4

Es ist möglich, weniger Spalten als der Booleschen Indizierung haben, so können Sie Spalte 2 fallen, wenn die Booleschen Kriterien Konstruktion:

df[df.drop(2, axis=1) < 1] = 0 

df 
#   0 1 2 
#foo 0.0 0.0 0.45 
#qux 0.0 4.1 2.78 
#bar 1.0 0.0 3.01 

df[df.drop(1, axis=1) < 1] = 0 

df 
#   0 1  2 
#foo 0.0 0.31 0.00 
#qux 0.0 4.10 2.78 
#bar 1.0 0.55 3.01 
+1

Ich konnte keine bessere Lösung finden ;-) – MaxU

Verwandte Themen