Невозможно сгруппировать значения в столбце Pandas по месяцам - PullRequest
2 голосов
/ 22 июня 2019

Я бы хотел посчитать количество экземпляров в журнале времени, сгруппированных по месяцам. У меня есть следующий столбец панд:

print df['date_unconditional'][:5]

0    2018-10-15T07:00:00
1    2018-06-12T07:00:00
2    2018-08-28T07:00:00
3    2018-08-29T07:00:00
4    2018-10-29T07:00:00
Name: date_unconditional, dtype: object

Затем я преобразовал его в формат даты и времени

df['date_unconditional'] = pd.to_datetime(df['date_unconditional'].dt.strftime('%m/%d/%Y'))
print df['date_unconditional'][:5]


0   2018-10-15
1   2018-06-12
2   2018-08-28
3   2018-08-29
4   2018-10-29
Name: date_unconditional, dtype: datetime64[ns]

А потом я попытался сосчитать их, но все равно получаю ошибку

df['date_unconditional'] = pd.to_datetime(df['date_unconditional'], errors='coerce')
print df['date_unconditional'].groupby(pd.Grouper(freq='M')).count()

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'

Формат не RangeIndex, я пытался изменить его по-разному, но эта ошибка продолжает появляться.

1 Ответ

0 голосов
/ 22 июня 2019

Использовать параметр key в Grouper:

df['date_unconditional'] = pd.to_datetime(df['date_unconditional'], errors='coerce')
print (df.groupby(pd.Grouper(freq='M',key='date_unconditional'))['date_unconditional'].count())
2018-06-30    1
2018-07-31    0
2018-08-31    2
2018-09-30    0
2018-10-31    2
Freq: M, Name: date_unconditional, dtype: int64

Или создайте DatetimeIndex с помощью DataFrame.set_index, а затем возможно использовать GroupBy.size - разница между count исключает пропущенные значения, size нет.

df['date_unconditional'] = pd.to_datetime(df['date_unconditional'], errors='coerce')
print (df.set_index('date_unconditional').groupby(pd.Grouper(freq='M')).size())
2018-06-30    1
2018-07-31    0
2018-08-31    2
2018-09-30    0
2018-10-31    2
Freq: M, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...