Как добавить новый столбец в фрейм данных Pandas при расчете элементов? - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу добавить новый столбец в pandas df, который будет рассчитываться на основе другого столбца.Вот краткий обзор df:

shortcut of df

Если дата находится между start_date1 и end_date1, она должна выводиться в столбце периода «0».Если дата находится между start_date2 и end_date2, выведите «1» и т. Д.

Есть ли способ сделать это без цикла?

Спасибо за вашу помощь :)

Ларри

1 Ответ

0 голосов
/ 31 декабря 2018

Прежде всего вам необходимо проверить, имеет ли ваш столбец date формат datetime.

Вы можете проверить это с помощью df.dtypes.Если у него нет формата даты (datetime64), вы должны преобразовать его в дату и время с помощью:

df['date'] = pd.to_datetime(df.date, format='%Y%m%d', errors='ignore')

Обратите внимание, что аргумент errors='ignore' имеет свои риски, поэтому его необязательно.

Теперь, чтобы создать вычисляемое поле, вы можете сделать это:

# define function to calculate periods based on date
def calculate_period(row): 
    if row['date'] > start_date1 & row['date'] < end_date1:
        return "0"

    elif row['date'] > start_date2 & row['date'] < end_date2:
        return "1"

    elif row['date'] > start_date3 & row['date'] < end_date3:
        return "2"

    else:
        return "unknown"


# apply function to create the new column
df['period'] = df.apply(calculate_period, axis=1)

Если вам нужно больше значений period, вы можете расширить операторы elif так, как вам нравится.

Так как не хватает информации о ваших данных.Я предположил, что start_date1 и end_date1 - переменные, которые вы определили.

Если это тоже столбцы.Функция будет выглядеть так:

# define function to calculate periods based on date
def calculate_period(row): 
    if row['date'] > row['start_date1'] & row['date'] < row['end_date1']:
        return "0"

    elif row['date'] > row['start_date2'] & row['date'] < row['end_date2']:
        return "1"

    elif row['date'] > row['start_date3'] & row['date'] < row['end_date3']:
        return "2"

    else:
        return "unknown"


# apply function to create the new column
df['period'] = df.apply(calculate_period, axis=1)

Удачи.

...