2016-06-07 24 views
1

Ich habe ein Dataframe und möchte eine neue Spalte basierend auf Bedingung erstellen, in dieser neuen Spalte, wenn eine bestimmte Bedingung erfüllt ist, dann wird der Wert aus einem anderen sein Spalte sonst muss es Null sein. Der Orginal DataFrame ist;Erstellen einer neuen Spalte basierend auf Bedingung mit Werten aus einer anderen Spalte in Python

df2 = pd.read_csv('C:\Users\ABC.csv') 
df2['Date'] = pd.to_datetime(df2['Date']) 
df2['Hour'] = df2.Date.dt.hour 
df2['Occupied'] = '' 
Date     Value Hour Occupied 
2016-02-02 21:00:00 0.6 21 
2016-02-02 22:00:00 0.4 22 
2016-02-02 23:00:00 0.4 23 
2016-02-03 00:00:00 0.3 0 
2016-02-03 01:00:00 0.2 1 
2016-02-03 02:00:00 0.2 2 
2016-02-03 03:00:00 0.1 3 
2016-02-03 04:00:00 0.2 4 
2016-02-03 05:00:00 0.1 5 
2016-02-03 06:00:00 0.4 6 

Ich mag gleiche Werte wie df2.Value in dem besetzten Spalte haben, wenn df2.Hour größer oder gleich 9 ist, da sonst die Werte Null in der besetzten Spalte sein werden. Ich habe den folgenden Code ausprobiert, aber es funktioniert nicht so, wie ich möchte (es druckt dieselben Werte wie df2.Value, ohne else-Anweisung zu berücksichtigen);

for i in df2['Hour']: 
    if i >= 9: 
     df2['Occupied'] = df2.Value 
    else: 
     df2['Occupied'] = 0 

Irgendeine Idee, was ist daran falsch?

Antwort

3

Verwendung where mit boolean Zustand ist, wird diese nicht alle Zeilenwerte gesetzt zeilenweise als Iterieren:

In [120]: 
df2['Occupied'] = df2['Value'].where(df2['Hour'] >= 9, 0) 
df2 

Out[120]: 
       Date Value Hour Occupied 
0 2016-02-02 21:00:00 0.6 21  0.6 
1 2016-02-02 22:00:00 0.4 22  0.4 
2 2016-02-02 23:00:00 0.4 23  0.4 
3 2016-02-03 00:00:00 0.3  0  0.0 
4 2016-02-03 01:00:00 0.2  1  0.0 
5 2016-02-03 02:00:00 0.2  2  0.0 
6 2016-02-03 03:00:00 0.1  3  0.0 
7 2016-02-03 04:00:00 0.2  4  0.0 
8 2016-02-03 05:00:00 0.1  5  0.0 
9 2016-02-03 06:00:00 0.4  6  0.0 
+0

Danke, das für mich gearbeitet. – Muhammad

Verwandte Themen