2017-12-27 4 views
1

나는 2010/12에서 2017/12까지 다음과 같은 재고 일별 가격 데이터를 가지고 있습니다. 지난 주 데이터를 매년 어떻게 선택할 수 있습니까? 매년 마지막 주간 실적을 확인하려고합니다.파이썬 데이터 프레임에서 지난 주 모든 데이터를 가져 오는 방법은 무엇입니까?

2017-01-05 52.99 13018070.0 52.370 53.0600 51.4000 
2017-01-04 52.86 12556860.0 50.770 53.3400 50.7300 
2017-01-03 50.29 15794400.0 48.800 50.3000 48.4700 
2016-12-30 46.75 13593420.0 48.365 48.4000 46.3600 
2016-12-29 47.77 11728250.0 48.440 48.8600 47.1800 
2016-12-28 48.51 14636340.0 50.580 50.7300 48.4700 
2016-12-27 50.43 5594876.0 49.690 50.5500 49.6500 
2016-12-23 49.59 6966559.0 49.250 49.7200 48.9900 
2016-12-22 49.44 10918300.0 50.320 50.5500 49.1711 
2016-12-21 50.34 9279635.0 49.820 50.4400 49.6700 
2016-12-20 49.53 9533020.0 48.990 49.7900 48.9100 
2016-12-19 48.55 10323930.0 47.450 48.6700 47.4300 
... 
2010-12-20 ... 

답변

1

datetime을 전달하는 groupby를 사용할 수 있습니다. 그러나 먼저 우리는 귀하의 기준에 맞지 않는 데이터를 제거 (필터링)해야합니다. 또한 날짜가 datetime인지 확인하십시오.

이 코드는 해당 월이 12 월 (12)과 같고 그 날짜가 25보다 크거나 (즉, 각 연도의 마지막 7 일) 확인합니다. 지난 주를 원하면 Wen's 람다 함수를 살펴보십시오.

data = '''\ 
2017-12-25 52.99 13018070.0 52.370 53.0600 51.4000 
2017-01-04 52.86 12556860.0 50.770 53.3400 50.7300 
2017-01-03 50.29 15794400.0 48.800 50.3000 48.4700 
2016-12-30 46.75 13593420.0 48.365 48.4000 46.3600 
2016-12-29 47.77 11728250.0 48.440 48.8600 47.1800 
2016-12-28 48.51 14636340.0 50.580 50.7300 48.4700 
2016-12-27 50.43 5594876.0 49.690 50.5500 49.6500 
2016-12-23 49.59 6966559.0 49.250 49.7200 48.9900 
2016-12-22 49.44 10918300.0 50.320 50.5500 49.1711 
2016-12-21 50.34 9279635.0 49.820 50.4400 49.6700 
2016-12-20 49.53 9533020.0 48.990 49.7900 48.9100 
2016-12-19 48.55 10323930.0 47.450 48.6700 47.4300''' 

import io 
import pandas as pd 

df = pd.read_csv(io.StringIO(data), sep='\s+', header=None, parse_dates=[0]) 
df = df[df[0].dt.month.eq(12) & df[0].dt.day.le(25)] # remove data 

# Groupby year according to: https://stackoverflow.com/a/11397052/7386332 
for idx, dfx in df.groupby(df[0].map(lambda x: x.year)): 
    print('Dataframe containing {}\'s last week:'.format(idx)) 
    print(dfx) 
    print() 

인쇄

Dataframe containing 2016's last week: 
      0  1   2  3  4  5 
7 2016-12-23 49.59 6966559.0 49.25 49.72 48.9900 
8 2016-12-22 49.44 10918300.0 50.32 50.55 49.1711 
9 2016-12-21 50.34 9279635.0 49.82 50.44 49.6700 
10 2016-12-20 49.53 9533020.0 48.99 49.79 48.9100 
11 2016-12-19 48.55 10323930.0 47.45 48.67 47.4300 

Dataframe containing 2017's last week: 
      0  1   2  3  4  5 
0 2017-12-25 52.99 13018070.0 52.37 53.06 51.4 
1

df[df.groupby(df[0].dt.year)[0].apply(lambda x : x.dt.week==x.dt.week.max())] 
Out[1471]: 
      0  1   2  3  4  5 
0 2017-12-25 52.99 13018070.0 52.370 53.06 51.40 
3 2016-12-30 46.75 13593420.0 48.365 48.40 46.36 
4 2016-12-29 47.77 11728250.0 48.440 48.86 47.18 
5 2016-12-28 48.51 14636340.0 50.580 50.73 48.47 
6 2016-12-27 50.43 5594876.0 49.690 50.55 49.65 
+0

:-) 안톤의 데이터는 사실은 내가 이런 걸 생각하지만 그것은 바로, 연도에 따라 달라? 그래서 25 세 이상이 효과가 있다고 생각했습니다. OP가 정말로 원하는 것이 달려 있습니다. –

+1

@AntonvBR 여기서 지난 주 정의 방법 :-) – Wen

관련 문제