2017-03-14 6 views
1

나는 다음과 같은 dataframe 있습니다

transaction_date  gp  
2017-01-17   3477.92 
2017-01-18   5839.64 
2017-01-19   5082.19 
2017-01-20   5761.63 
2017-01-21   6705.89 
2017-01-22   9937.17 
2017-01-23   9432.93 
2017-01-24   7965.56 
2017-01-25   8517.26 
2017-01-26   8098.36 
2017-01-27   8947.25 
2017-01-28   8473.38 
2017-01-29   11660.13 
2017-01-30   10266.24 
2017-01-31   4350.21 
2017-02-01   10820.15 
2017-02-02   8554.61 
2017-02-03   10689.69 

내가 2017-를 사이의 모든 트랜잭션에 대해 예를 들어, 일주일의 하루를 시작하여 transaction_date 열을 기준으로 그룹에 필요 01-23 2017년 1월 30일로는 Jan-23 그래서 기본적으로 내가 그 트랜잭션에서 일어난 요일을 시작 보여주는 새 열 'first_day_week'을 필요로해야한다.

답변

2

추가 할 수 있습니다. 나중에 매주 시작일을 얻으려면 start_time 속성에 액세스하십시오. 우리는 일련의 객체를 다루기 때문에, datetime 관련 작업을 수행하면서 매번 .dt 접근자를 제공해야합니다.

df.assign(first_day_week= 
      df['transaction_date'].dt.to_period('W').dt.start_time.dt.strftime("%b-%d")) 

enter image description here

3

당신은 .dt 방법을 사용할 수

데이터 정의

s = pd.Series(data={ 
'2017-01-17':3477.92, 
'2017-01-18':5839.64, 
'2017-01-19':5082.19, 
'2017-01-20':5761.63, 
'2017-01-21':6705.89, 
'2017-01-22':9937.17, 
'2017-01-23':9432.93, 
'2017-01-24':7965.56, 
'2017-01-25':8517.26, 
'2017-01-26':8098.36, 
'2017-01-27':8947.25,} ) 
transaction_date = pd.Series(pd.to_datetime(s.index)) 

얻기 일주일의 시작

start_of_week = transaction_date - pd.to_timedelta(transaction_date.dt.weekday, unit='D') 
start_of_week 

반환
0 2017-01-16 
1 2017-01-16 
2 2017-01-16 
3 2017-01-16 
4 2017-01-16 
5 2017-01-16 
6 2017-01-23 
7 2017-01-23 
8 2017-01-23 
9 2017-01-23 
10 2017-01-23 

는 포맷 주 열

의 시작에 할당 할 수 있습니다형식이 중요한 경우 1,363,210

, 당신은 당신이 원하는 매주 주파수를 갖는 기간 객체에 날짜 시리즈 개체를 변환 할 수 있습니다, 첫째

start_of_week = start_of_week.dt.strftime('%b-%d') 

+0

좋은 솔루션, +1 – jezrael

+0

당신이 너무 많은 @Nickil 응답을 더 간결하게 보인다 감사 – sanaz