Если ошибка оператора при работе с фреймом данных - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть столбец со значениями, которые являются отрицательными и положительными. Если значения отрицательные, я хочу добавить (24 * 60) к ним. если они положительны, они останутся прежними. Я написал код ниже, но он выдает ошибку: «Значение истинности Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all () "

Я пробовал .any () и .all (), но он не работает

    if df_da.loc[i,'Time_diff'] < 0 :
        df_da.loc[i, "Time_diff"]= df_da.loc[i, "Time_diff"]+(24*60)
    else:
        df_da.loc[i, "Time_diff"]= df_da.loc[i, "Time_diff"]

Ответы [ 3 ]

1 голос
/ 03 ноября 2019

Попробуйте это

df_da["Time_diff"] = (df_da["Time_diff"] < 0)*(24*60) + df_da["Time_diff"]

Это в основном добавит 24 * 60 ко всем строкам, которые возвращают True для неравенства. Это не будет включать цикл for снаружи, который, я предполагаю, есть.

0 голосов
/ 04 ноября 2019

Я не могу найти источник ошибки, возможно, потребуется код для вашего DataFrame и для i.

В настоящее время принятый ответ основан на приведении логических значений к числам и факте, чтох * 0 = хЭто не работает в большинстве случаев и не особенно легко понять.

Вот как я бы это сделал:

neg_time_diff_idx = df_da['Time_diff'] < 0
df_da.loc[neg_time_diff_idx, 'Time_diff'] = df_da.loc[neg_time_diff_idx, 'Time_diff'] + (24 * 60) 

Что можно упростить до:

neg_time_diff_idx = df_da['Time_diff'] < 0
df_da.loc[neg_time_diff_idx, 'Time_diff'] += 24 * 60
0 голосов
/ 03 ноября 2019

Аналогично ответу Яша Шармы.

df_da['Time_diff'] += 24*60 if df_da['Time_diff'] < 0 else 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...