ProgramingTip

pandas 데이터 프레임 그룹 별 datetime 월

bestdevel 2020. 11. 19. 21:51
반응형

pandas 데이터 프레임 그룹 별 datetime 월


csv 파일을 고려하십시오.

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

시행 날짜 열을 datetime 형식으로 다시 형식화 할 수 있습니다.

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

그러나 나는 월별로 함께 묶는 기능이 없을 것입니다.


관리 :

b=pd.read_csv('b.dat')
b.groupby(by=[b.index.month, b.index.year])

또는

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

(업데이트 : 2018)

참고 pd.Timegrouper감가 상각 및 제거됩니다. 대신 사용 :

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

MultiIndex를 피하는 한 가지 해결책은 datetimeday = 1로 설정 하는 새 을 만드는 것 입니다. 그런 다음이 열을 기준으로 그룹화합니다. 아래의 간단한 예.

df = pd.DataFrame({'Date': pd.to_datetime(['2017-10-05', '2017-10-20']),
                   'Values': [5, 10]})

# normalize day to beginning of month
df['YearMonth'] = df['Date'] + pd.offsets.MonthBegin(1)

# two alternative methods
df['YearMonth'] = df['Date'] - pd.to_timedelta(df['Date'].dt.day-1, unit='D')
df['YearMonth'] = df['Date'].map(lambda dt: dt.replace(day=1))

g = df.groupby('YearMonth')

res = g['Values'].sum()

# YearMonth
# 2017-10-01    15
# Name: Values, dtype: int64

이 솔루션의 미묘한 이점은과 달리 pd.Grouper그룹화 색인이 매월 끝이 아닌 초순 으로 정규화 되므로 다음을 통해 그룹을 쉽게 추출 할 수 있다는 것입니다 get_group.

some_group = g.get_group('2017-10-01')

10 월 마지막 날을 계산하는 것은 약간 더 번거 롭습니다. pd.Grouper, v0.23부터는 convention매개 변수를 지원 하지만 이는 PeriodIndex그루퍼 에만 적용됩니다 .


@jpp에 대한 약간의 대안 솔루션이지만 YearMonth문자열을 출력 합니다.

df['YearMonth'] = pd.to_datetime(df['Date']).apply(lambda x: '{year}-{month}'.format(year=x.year, month=x.month))

res = df.groupby('YearMonth')['Values'].sum()

참고 URL : https://stackoverflow.com/questions/24082784/pandas-dataframe-groupby-datetime-month

반응형