2016-07-18 5 views
1

ich einen Datenrahmen data haben, die wie folgt aussieht:eine Datenrahmen Spalte Füllung auf der Basis mehrerer bedingte Entscheidungen

Holiday Report Action  Power 
0    0  0  1.345 
0    0  0  1.345 
1    0  0  0 
0    0  0  1.345 
0    0  0  1.345 
0    1  0  0 
0    0  0  1.345 
0    1  1  0 
0    0  0  1.345 
0    0  1  0 

Spalten ‚Feiertag‘, ‚Report‘ und ‚Aktionen‘ gezogen in Leistung, indem man ein berechnet wird. einige andere Spalten von Daten. Ich suche nach einer Codezeile, die es mir erlaubt, die Leistung auf Null zu setzen, wenn eine der Spalten 'Urlaub', 'Bericht' oder 'Aktionen' auf 1 gesetzt ist.

Ich kann dieses Verfahren eine Spalte machen auf einmal:

aber gibt es eine Möglichkeit, sie in einer Funktion mit etwas wie eine OR-Anweisung zu kombinieren?

Vielen Dank

Antwort

3

Sie können die Zeilen Unterauswahl durch Schneiden, vergleichen, gegen 1 und verwenden any mit param axis=1 und erstellen Sie einen boolean Maske Weitergabe an loc nur die Zeilen zu setzen, um den Zustand zu 1 erfüllen wie gewünscht:

In [23]: 
df.loc[(df.ix[:,:'Action'] == 1).any(axis=1), 'Power'] = 1 
df 

Out[23]: 
    Holiday Report Action Power 
0  0  0  0 1.345 
1  0  0  0 1.345 
2  1  0  0 1.000 
3  0  0  0 1.345 
4  0  0  0 1.345 
5  0  1  0 1.000 
6  0  0  0 1.345 
7  0  1  1 1.000 
8  0  0  0 1.345 
9  0  0  1 1.000 
+0

Vielleicht somethin g wie: 'np.where ((df.ix [:,: 'Aktion'] == 1) .any (Achse = 1), 0,1.345)'? – Divakar

+0

@Divakar, das alle Zeilen behandelt, hier wird mit 'loc' nur die Zeilen aktualisiert, die die Bedingung erfüllen, wobei vorhandene Werte unverändert bleiben – EdChum

+0

Oh ja. Also, ich denke, Sie können das vermeiden> 0 und die Zuweisung muss "0" statt "1" sein? – Divakar

1

this helps np.where mit:

In[49]:df['Power']=np.where((df['Holiday']==1)|(df['Report']==1)|(df['Action']==1),1,df['Power']) 

In[50]:df 
Out[50]: 
    Holiday Report Action Power 
0  0  0  0 1.345 
1  0  0  0 1.345 
2  1  0  0 1.000 
3  0  0  0 1.345 
4  0  0  0 1.345 
5  0  1  0 1.000 
6  0  0  0 1.345 
7  0  1  1 1.000 
8  0  0  0 1.345 
9  0  0  1 1.000 
Verwandte Themen