Панды - Хранение результатов df.apply () только для выбора строк - PullRequest
0 голосов
/ 02 июля 2018

У меня есть довольно запутанная df.apply() для вычисления рабочих часов между двумя датами.

У меня это работает без проблем для одной строки / примера, однако сейчас я пытаюсь применить его ко всей df.

Пример кода: df.apply(lambda row: calc_bus_hrs(row['Created Date'], row['T1 - Date']) if not (pd.isnull(row['T1 - Date'])) else np.nan, axis=1)

Файл df.apply не подходит для каждой строки и возвращает nan выходных данных , что в порядке .

Выход:

40171 NaN 40172 NaN 40173 0.399722 40174 NaN 40175 NaN 40176 NaN 40177 NaN 40178 NaN 40179 0.017222 40180 NaN

Теперь я хочу сохранить в моей df, используя другое значение столбцов, например:

df[df['T1 - From'].values[0] + " Time"]

Теперь проблема в том, что приведенный выше код завершается ошибкой, когда df[df['T1 - From'].values[0] содержит nan.

  • Как сохранить выходные данные только в те строки, которые не являются nan?

Полный код:

df[df['T1 - From'].values[0] + " Time"] = df.apply(lambda row: calc_bus_hrs(row['Created Date'], row['T1 - Date']) if not (pd.isnull(row['T1 - Date'])) else np.nan, axis=1)

Ошибка:

TypeError: unsupported operand type(s) for +: 'float' and 'str'

1 Ответ

0 голосов
/ 02 июля 2018

Этого можно добиться, определив отдельную лямбда-функцию, которая может обрабатывать логику строк:

def lambda_func(row):
    if df['T1 - Date'] is not None:
        return calc_bus_hrs(row['Created Date'], row['T1 - Date'])
    else:
        return nan

df[df['T1 - From'].values[0] + " Time"] = df.apply(lambda_func(x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...