Pandas Передискретизация индекса DateTime не работает - PullRequest
1 голос
/ 12 января 2020

У меня есть pandas кадр данных, как показано в коде ниже. Я пытаюсь «пересчитать» данные, чтобы получить ежедневный счет столбца заявок. Это не дает никакой ошибки, но повторная выборка не работает. Это образец гораздо большего набора данных. Я хочу быть в состоянии получить счет по дням, неделям, месяцам и т. Д. c. Но вариант .resample не дает мне решения. Что я делаю не так?

import pandas as pd
df = pd.DataFrame([['2019-07-30T00:00:00','22:15:00','car'],
                    ['2013-10-12T00:00:00','0:10:00','bus'],
                    ['2014-03-31T00:00:00','9:06:00','ship'],
                    ['2014-03-31T00:00:00','8:15:00','ship'],
                    ['2014-03-31T00:00:00','12:06:00','ship'],
                    ['2014-03-31T00:00:00','9:24:00','ship'],
                    ['2013-10-12T00:00:00','9:06:00','ship'],
                    ['2018-03-31T00:00:00','9:06:00','ship']],
                    columns=['date_field','time_field','transportation'])
df['date_field2'] = pd.to_datetime(df['date_field'])
df['time_field2'] = pd.to_datetime(df['time_field'],unit = 'ns').dt.time
df['date_time_field'] = df.apply(lambda df : pd.datetime.combine(df['date_field2'],df['time_field2']),1)
df.set_index(['date_time_field'],inplace=True)
df.drop(columns=['date_field','time_field','date_field2','time_field2'],inplace=True)
df['tickets']=1
df.sort_index(inplace=True)
df.drop(columns=['transportation'],inplace=True)
df.resample('D').sum()
print('\ndaily resampling:')
print(df)

1 Ответ

2 голосов
/ 12 января 2020

Я думаю, что вы забыли назначить вывод переменной как:

df1 = df.resample('D').sum()
print (df1)

Также ваш код должен быть упрощен:

#join columns together with space and pop for extract column
df['date_field'] = pd.to_datetime(df['date_field']+ ' ' + df.pop('time_field'))
#create and sorting DatetimeIndex, remove column
df = df.set_index(['date_field']).sort_index().drop(columns=['transportation'])
#resample counts
df1 = df.resample('D').size()
print (df1)
date_field
2013-10-12    2
2013-10-13    0
2013-10-14    0
2013-10-15    0
2013-10-16    0
             ..
2019-07-26    0
2019-07-27    0
2019-07-28    0
2019-07-29    0
2019-07-30    1
Freq: D, Length: 2118, dtype: int64

Также я думаю, что inplace не хорошо потренируйтесь, проверьте это и это .

...