2017-03-03 1 views
2
에서 그들을 계산 후

나는 문자열에서 날짜와 시간을 추출 wrintig에 의해, 팬더 DatFrame로 변환 :파이썬 : 정렬 날짜 팬더

df = pd.to_datetime(news_date, format='%m/%d/%Y') 

출력과 같은 것입니다 :

['1997-10-31 18:00:00', '1997-10-31 18:00:00', 
      '1997-10-31 18:00:00', '1997-10-31 18:00:00', 
      '1997-10-31 18:00:00', '1997-10-31 18:00:00', 
      '1997-10-31 18:00:00', '1997-10-31 18:00:00', 
      '1997-10-31 18:00:00', '1997-10-31 18:00:00', 
      ... 
      '2016-12-07 03:14:00', '2016-12-09 16:31:00', 
      '2016-12-10 19:02:00', '2016-12-11 09:41:00', 
      '2016-12-12 05:01:00', '2016-12-12 05:39:00', 
      '2016-12-12 06:44:00', '2016-12-12 08:11:00', 
      '2016-12-12 09:36:00', '2016-12-12 10:19:00'] 

그럼 난 단지 연도와 월을 유지하고 날짜를 정렬하고 싶어, 내가 쓴 :

month_year = df.to_series().apply(lambda x: dt.datetime.strftime(x, '%m-%Y')).tolist() # remove time and day 
new = sorted(month_year, key=lambda x: datetime.datetime.strptime(x, '%m-%Y')) # sort date 

지금까지, 내가 알이 날짜의 ist. 문제는 내가 그들의 빈도를 세우려고 할 때 발생한다. 나는 나중에 시간 분포를 그려야한다.

print(pd.DataFrame(new).groupby(month_year).count()) 

출력은 다음과 같습니다 : 내 코드는 내가 1 열에서 정렬 된 날짜를 갖고 싶어, 그럼에도 불구하고

01-1998 60 
01-1999 18 
01-2000 49 
01-2001 50 
01-2002 87 
01-2003 129 
01-2004 125 
01-2005 225 
01-2006 154 
01-2007 302 
01-2008 161 
01-2009 161 
01-2010 167 
01-2011 181 
01-2012 227 
...  ... 
12-2014 82 
12-2015 89 
12-2016 13 

, 다른 열에 주파수 (예를 들어, 팬더 DataFrame) sortin에 대한 to_period 다음 value_counts를 변환하여 당신이 month period 필요가 있다고 생각

01-1998 60 
02-1998 32 
03-1998 22 
...  ... 
11-2016 20 
12-2016 13 

답변

2

: 그처럼 쉽게 그릴 수 있습니다 g 사용 sort_index :

news_date = ['1997-10-31 18:00:00', '1997-10-31 18:00:00', 
      '1997-10-30 18:00:00', '1997-10-30 18:00:00', 
      '1997-10-30 18:00:00', '1997-10-30 18:00:00', 
      '1997-11-30 18:00:00', '1997-11-30 18:00:00', 
      '1997-12-30 18:00:00', '1997-12-30 18:00:00', 
      '2016-12-07 03:14:00', '2016-01-09 16:31:00', 
      '2016-12-10 19:02:00', '2016-01-11 09:41:00', 
      '2016-12-12 05:01:00', '2016-02-12 05:39:00', 
      '2016-12-12 06:44:00', '2016-12-12 08:11:00', 
      '2016-12-12 09:36:00', '2016-12-12 10:19:00'] 

idx = pd.to_datetime(news_date) 
new = pd.Series(idx.to_period('m')) 
print (new) 
0 1997-10 
1 1997-10 
2 1997-10 
3 1997-10 
4 1997-10 
5 1997-10 
6 1997-11 
7 1997-11 
8 1997-12 
9 1997-12 
10 2016-12 
11 2016-01 
12 2016-12 
13 2016-01 
14 2016-12 
15 2016-02 
16 2016-12 
17 2016-12 
18 2016-12 
19 2016-12 
dtype: object 
df = new.value_counts().sort_index().reset_index() 
df.columns = ['Date','Count'] 
df.Date = df.Date.dt.strftime('%Y-%m') 
print (df) 
     Date Count 
0 1997-10  6 
1 1997-11  2 
2 1997-12  2 
3 2016-01  2 
4 2016-02  1 
5 2016-12  7 

다른 가능한 솔루션 strftime 의해 제 strings 변환된다

new = pd.Series(idx.strftime('%Y-%m')) 
df = new.value_counts().sort_index().reset_index() 
df.columns = ['Date','Count'] 
print (df) 
    Date Count 
0 1997-10  6 
1 1997-11  2 
2 1997-12  2 
3 2016-01  2 
4 2016-02  1 
5 2016-12  7