2014-06-06 7 views
39

Рассмотрим CSV файл:панды dataframe GroupBy DateTime месяц

string,date,number 
a string,2/5/11 9:16am,1.0 
a string,3/5/11 10:44pm,2.0 
a string,4/22/11 12:07pm,3.0 
a string,4/22/11 12:10pm,4.0 
a string,4/29/11 11:59am,1.0 
a string,5/2/11 1:41pm,2.0 
a string,5/2/11 2:02pm,3.0 
a string,5/2/11 2:56pm,4.0 
a string,5/2/11 3:00pm,5.0 
a string,5/2/14 3:02pm,6.0 
a string,5/2/14 3:18pm,7.0 

Я могу читать это, и переформатировать столбец даты в формат даты и времени:

b=pd.read_csv('b.dat') 
b['date']=pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p') 

Я пытался сгруппировать данные по месяцам. Похоже, что должен быть очевидный способ доступа к месяцу и группировки. Но я не могу это сделать. Кто-нибудь знает как?

То, что я в настоящее время пытается повторно индексации по дате:

b.index=b['date'] 

Я могу войти в месяц, как так:

b.index.month 

Однако я не могу найти функцию единовременно.

ответ

76

Успели сделать это:

df.groupby(by=[b.index.month, b.index.year]) 

Или

df.groupby(pd.Grouper(freq='M')) # update for v0.21+ 
+36

Я думаю, что более pandonic способы являются либо использовать 'resample' (когда он обеспечивает необходимую функциональность), или использовать' TimeGrouper': 'df.groupby (pd.TimeGrouper (частота =» M ')) ' –

+5

, чтобы получить результат Сумма или среднее значение DataFrame,' df.groupby (pd.TimeGrouper (freq =' M ')). Sum() 'или' df.groupby (pd.TimeGrouper (freq =' M ')). mean() ' – Alexandre

12

(обновление: 2018)

Обратите внимание, что pd.Timegrouper амортизируется и будут удалены. Вместо этого используйте:

df.groupby(pd.Grouper(freq='M')) 
+1

Чтение в 2018 году :) – jtromans

Смежные вопросы