2017-02-08 1 views
0

팬더스에서는 타임 스탬프의 나머지 부분이 같을 때 여러 해에 걸쳐 값을 그룹화하는 groupby 연산이 있습니까?팬더 데이터 프레임 : 여러 해에 걸친 그룹

예를 들어, 12:00:00 01/01/2000, 12:00:00 01/01/2001 및 12:00:00 01/01/2002는 15:00:00과 같이 그룹을 형성합니다 01/01/2000, 15시 0분 0초 01/01/2001 및 15시 0분 0초 2002-01-01 ... 등

나는 종류의에이를 수 있습니다

group = pd.groupby(timeseries, by=[timeseries.index.minute, timeseries.index.hour, timeseries.index.day, timeseries.index.month])

하지만 실제로는보기가 좋지 않으며 입력 시간 형식에 유연하지 않습니다. 제가 정말로 원했던 것은 groupby에서 그 해를 제외시키는 방법이었습니다.

+0

일자 얻을? – Boud

+0

유연하지 못하고 못 생겼다. 시계열 데이터 해상도가 초보다 작 으면 두 번째로 여러 데이터가 그룹화되어 작동하지 않는다는 사실을 정말로 언급했다. 내 사용법에서는보기 힘들지만 가능한 한 많은 잠재적 인 상황을 시험해보고 싶습니다. 분명히 나는 ​​timeseries.index.second를 앞 (등)에 포함시킬 수 있지만, 더 작거나 작은 해상도의 경우에는 약간 바보가됩니다. 필자는 입력 데이터의 해상도와 독립적 인보다 우아한 방법을 원했습니다. – EngStan

답변

1

당신은 어떤 일정한 year 다음 groupbyindex으로 설정할 수 있습니다

timeseries.index = timeseries.index.map(lambda t: t.replace(year=2010)) 
print (timeseries) 
group = timeseries.groupby(level=0).sum() 
print (group) 
1

당신은 TimedeltaIndex을 만들 매년의 시작에 대한 타임 스탬프를 뺄 수 있습니다. 벡터화 방법으로이 작업을 수행하는 한 가지 방법은 조심하는

>>> idx = pd.date_range('2000-01-01', periods=1000) 

>>> idx 
DatetimeIndex(['2001-01-01', '2001-01-02', '2001-01-03', '2001-01-04', 
       '2001-01-05', '2001-01-06', '2001-01-07', '2001-01-08', 
       '2001-01-09', '2001-01-10', 
       ... 
       '2003-09-18', '2003-09-19', '2003-09-20', '2003-09-21', 
       '2003-09-22', '2003-09-23', '2003-09-24', '2003-09-25', 
       '2003-09-26', '2003-09-27'], 
       dtype='datetime64[ns]', length=1000, freq='D') 

# note that pandas only handles datetime64[ns], so we convert back 
# using pd.to_datetime 

>>> deltas = idx - pd.to_datetime(idx.values.astype('datetime64[Y]')) 

>>> deltas 
TimedeltaIndex([ '0 days', '1 days', '2 days', '3 days', '4 days', 
        '5 days', '6 days', '7 days', '8 days', '9 days', 
       ... 
       '260 days', '261 days', '262 days', '263 days', '264 days', 
       '265 days', '266 days', '267 days', '268 days', '269 days'], 
       dtype='timedelta64[ns]', length=1000, freq=None) 

>>> group = pd.Series(np.arange(1000), idx).groupby(deltas) 

것은 도약-년, 예를 들어 NumPy와,와 다른 시간 해상도 datetime64 형식으로 변환됩니다 - 당신은 몇 가지로 끝날 것 365-366 일의 날짜 시간 차이가 매달려 있습니다.

0

이와 비슷한?

t = pd.Series(['12:00:00 01/01/2000', '12:00:00 01/01/2001' ,'12:00:00 01/01/2002' ,'15:00:00 01/01/2000', '15:00:00 01/01/2001','15:00:00 01/01/2002']) 
df = pd.DataFrame(t.str.split(' ',1).tolist(), 
           columns = ['Time','Date']) 
df.groupby(['Time', 'Date']).required_function() 

당신은 데이터가 시간에 그룹화하고 왜이 충분히 작동하지 않습니다 당신이 당신의 질문에 정교하게 수 없음 여기에 유연한 추한 아니라 어떤 확신