Понимание пересчета даты и времени в пандах - PullRequest
0 голосов
/ 23 мая 2018

У меня вопрос по поводу передискретизации DataFrames.

import pandas as pd
df = pd.DataFrame([['2005-01-20', 10], ['2005-01-21', 20], 
                   ['2005-01-27', 40], ['2005-01-28', 50]],
                   columns=['date', 'num'])

# Convert the column to datetime 
df['date'] = pd.to_datetime(df['date'])

# Resample and aggregate results by week
df = df.resample('W', on='date')['num'].sum().reset_index()

print(df.head())
# OUTPUT: 
#         date  num
# 0 2005-01-23   30
# 1 2005-01-30   90 

Все работает, как и ожидалось, но я бы хотел лучше понять, что именно resample(), ['num'] и sum() делают здесь.

ВОПРОС # 1

Почему происходит следующее:

Результат df.resample('W', on='date') равен DatetimeIndexResampler.

результат df.resample('W', on='date')['num'] равен pandas.core.groupby.SeriesGroupBy.

Результат df.resample('W', on='date')['num'].sum() равен

date
2005-01-23    30
2005-01-30    90
Freq: W-SUN, Name: num, dtype: int64

ВОПРОС # 2

Есть лиспособ получить те же результаты без пересчета?Например, используя groupby.

1 Ответ

0 голосов
/ 23 мая 2018

Ответ1

  1. Как сказано в документах , .resample возвращает объект Resampler.Следовательно, вы получаете DatetimeIndexResampler, потому что date является объектом даты и времени.

  2. Теперь вы получаете <pandas.core.groupby.SeriesGroupBy, потому что вы ищете Series из кадра данных, основанного на Resampler объект.

    Да, кстати,

    df.groupby([pd.Grouper(key='date', freq='W-SUN')])['num'] Вернется также <pandas.core.groupby.SeriesGroupBy.

  3. Теперь, когда вы делаете .sum(), вы получаете сумму по запрошенной оси кадра данных.Вы получаете Series, потому что вы делаете сумму за pandas.core.series.Series.

Ответ2

Вы можете достичь результатов, используя groupbyс помощью Grouper следующим образом:

df.groupby([pd.Grouper(key='date', freq='W-SUN')])['num'].sum()

Вывод:

date
2005-01-23    30
2005-01-30    90
Name: num, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...