как нормализовать дату в пандах - PullRequest
2 голосов
/ 18 октября 2019

У меня есть столбец панд с типом даты, который варьируется от 2015-01-01 до 2019-01-01, и я хочу создать новый столбец, который может нормализовать мои значения до одной цифры

У меня естьстолбец панд, как показано ниже

A

2015-01-01
2015-02-01
2015-03-01
...
...
2019-12-01

, и я хочу новый столбец, как показано ниже

A                   B

2015-01-01          0
2015-02-01          1
2015-03-01          2
2015-05-01.         4
...
2019-11-01.         46
2019-12-01          47

Ответы [ 3 ]

1 голос
/ 18 октября 2019

Мы можем использовать resample

df1=df.copy()
df.index=df.A
s=df.resample('MS').count()
df1['B']=df1.A.map(pd.Series(np.arange(len(s)),index=s.index))
df1
           A   B
0 2015-01-01   0
1 2015-02-01   1
2 2015-03-01   2
3 2019-12-01  59
1 голос
/ 18 октября 2019

Используйте Series.asfreq с DatetimeIndex для всех значений, затем столбец диапазона ящиков на DataFrame.assign и последнее использование Series.map:

s = df.set_index('A').asfreq('MS').assign(new=lambda x: np.arange(len(x)))['new']
df['B'] = df['A'].map(s) 
print (df)
           A   B
0 2015-01-01   0
1 2015-02-01   1
2 2015-03-01   2
3 2019-12-01  59

Деталь :

print (s)
A
2015-01-01     0
2015-02-01     1
2015-03-01     2
2015-04-01     3
2015-05-01     4
2015-06-01     5
2015-07-01     6
...
...
...
2019-06-01    53
2019-07-01    54
2019-08-01    55
2019-09-01    56
2019-10-01    57
2019-11-01    58
2019-12-01    59
Freq: MS, Name: new, dtype: int32
0 голосов
/ 18 октября 2019

Убедитесь, что A является столбцом даты и времени

df['A'] = pd.to_datetime(df['A'])

Вычтите дату начала из каждой последующей даты.

start = df['A'].sort_values('A').iloc[0, 0]
df'B'] = df['A'].apply(lambda x: x - start).dt.days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...