Почему я не могу использовать числовой индекс кадра данных в вычислениях с apply и pandas DateOffset? - PullRequest
1 голос
/ 14 апреля 2020

Мне нужно создать столбец в фрейме данных, содержащий даты 3 месяца друг от друга.

Я пытался использовать df.apply с pandas .DateOffset и числовым индексом фрейма данных, но я получаю эта ошибка:

Ошибка типа: невозможно выполнить rmul с этим типом индекса: индекс

Что это значит? Индекс является числовым и может использоваться в других расчетах - посмотрите, как я вычисляю df ['y'] ниже.

import pandas as pd
import numpy as np


df =pd.DataFrame()
df['something'] = np.arange(4,61)
my_date = pd.to_datetime('1/Jan/2021', format='%d/%b/%Y')

#this doesn't work
df['dates']= df.apply( lambda x: my_date + pd.DateOffset(months = 3 * x.index), axis=1 )

#this works
df['y'] = df.index * 2
df = df.reset_index()
df['dates']= df.apply( lambda x: my_date + pd.DateOffset(months = 3 * x['index']), axis=1 )

1 Ответ

1 голос
/ 14 апреля 2020

Поскольку вы применяете с axis=1, x - это строка. И каждая строка является серией, проиндексированной столбцом данных. Итак, вы хотите name, а не index:

df['dates']= df.apply( lambda x: my_date + pd.DateOffset(months = 3 * x.name), axis=1)

Вывод:

   something      dates
0          4 2021-01-01
1          5 2021-04-01
2          6 2021-07-01
3          7 2021-10-01
4          8 2022-01-01
...