2013-11-21 5 views
5

date 열이 포함 된 팬더 데이터 프레임이 있습니다. 해당 열의 요소는 pandas.tslib.Timestamp입니다.날짜순으로 팬더 데이터 프레임 그룹화

날짜별로 데이터 프레임을 그룹화하고 싶지만 해당 날짜보다 세분화 된 (즉, 날짜순으로 그룹화하는 모든 Feb 23, 2011 그룹화 된) 타임 스탬프 정보를 제외하고 싶습니다. 나는 이것을 SQL로 표현하는 방법을 알고 있지만 Pandas에게는 아주 새로운 것이다.

This question 뭔가 매우 유사하지만 코드를 이해하지 못하고 datetime 개체를 사용합니다.

documentation에서 나는 팬더 타임 스탬프 개체에서 날짜를 검색하는 방법조차 모릅니다. 내가 datetime 개체로 변환 할 수 있지만 매우 원형처럼 보입니다.


요청으로 df.head()의 출력 : 당신이 GROUPBY과 (SQL처럼) 집계 또는 대신 소인의 날짜 인덱스를 만들려고하는 경우 그것은 분명하지 않다

date show network timed session_id 
0 2011-12-03 02:48:52 Monk TV38 670  00003DA9-01D2-E7A9-4177-203BE6A9E2BA  
1 2011-12-03 03:00:09 WBZ News TV38 205  00003DA9-01D2-E7A9-4177-203BE6A9E2BA 
2 2011-12-03 03:04:04 Dateline NBC NBC  30 00003DA9-01D2-E7A9-4177-203BE6A9E2BA 
3 2011-12-03 03:04:35 20/20 ABC  25 00003DA9-01D2-E7A9-4177-203BE6A9E2BA 
4 2011-12-03 03:04:56 College Football FOX  55 00003DA9-01D2-E7A9-4177-203BE6A9E2BA 
+1

df.head()의 출력은 여기에서 환영받을 것입니다 – Boud

답변

12

당신은 (자정 그날 걸립니다)에 normalize DatetimeIndex 방법을 사용할 수 있습니다

In [11]: df['date'] 
Out[11]: 
0 2011-12-03 02:48:52 
1 2011-12-03 03:00:09 
2 2011-12-03 03:04:04 
3 2011-12-03 03:04:35 
4 2011-12-03 03:04:56 
Name: date, dtype: datetime64[ns] 

In [12]: pd.DatetimeIndex(df['date']).normalize() 
Out[12]: 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2011-12-03 00:00:00, ..., 2011-12-03 00:00:00] 
Length: 5, Freq: None, Timezone: None 

을 그리고 당신은이 GROUPBY 수 있습니다

g = df.groupby(pd.DatetimeIndex(df['date']).normalize()) 

0.15에서 당신이해야합니다 dt 속성에 대한 액세스는 다음과 같이 작성할 수 있습니다.

g = df.groupby(df['date'].dt.normalize()) 
+0

감사합니다. 이해합니다. 그리고 이것이 제가 찾고 있었던 것입니다. –

+2

다른 대안 :'pd.DatetimeIndex (df [ "date"]). date' 대신. 한 가지 이점은 그룹화하려는 많은 일반적인 것들이 내장되어 있다는 것입니다 :'.month','.year','.hour' 등 – DSM

+0

이 방법은 시간대를 무시하지만 patrickrm101은 그렇지 않습니다. –

3

.

당신이 GROUPBY 및 aggregrate하려는 경우, 당신은 이런 식으로 할 수있는 : 그것은 유일한 이후

df.groupby(df.set_index('date').index.date).mean() 

시계열 인덱스 등 요일, 날짜, 같은 날짜를 properites을 가지고있는 시간이 초과 열을 집계합니다 숫자 열. 이것은 당신에게 타임 스탬프 및 날짜와 multiindex을 줄 것이다

import datetime 
df.set_index(['date', df.date.apply(lambda x: datetime.datetime.date(x))], inplace=True) 
df.index.names = ['timestamp', 'daydate'] 

: 당신이 날짜 레벨 인덱스를 생성하려는 경우

, 당신은 뭔가를 할 수 있습니다. 인덱스를 영구적으로 사용하지 않으려면 inplace = 인수를 삭제하십시오.

+0

나는 groupby와 aggregate를 의미합니다. 앤디 헤이든 (Andy Hayden) (즉, 며칠 이상 근무하는)이 당신의 방법이 좀 더 일반적인 것으로 보입니다. –