2016-06-07 3 views
1

У меня есть Dataframe и я хотел бы создать новый столбец на основе условия в этом новом столбце, если выполняется определенное условие, тогда значение будет из другого в противном случае он должен быть равен нулю. The Orginal DataFrame:Создание нового столбца на основе условия со значениями из другого столбца в 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 

Я хотел бы иметь те же значения, как df2.Value на оккупированной колонке, если df2.Hour больше или равно 9, в противном случае значения будут равны нулю в оккупированной колонке. Я пробовал следующий код, но он не работает, как я хотел бы (он печатает те же значения, что и df2.Value, не считая инструкции else);

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

Любая идея, что не так с этим?

ответ

3

where использования с логическим условием, это установит все значения строк, а не перебор рядов:

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

Спасибо, это работает для меня. – Muhammad

Смежные вопросы