2016-11-10 7 views
1

ich eine CSV-Datei mit Tabelle, die nur wieconvert datetimeindex zu Qx-YY-Format

Date  Open 
11/1/2016 59.970001 
10/3/2016 57.41 
9/1/2016 57.009998 
8/1/2016 56.599998 
7/1/2016 51.130001 
6/1/2016 52.439999 
5/2/2016 50 
4/1/2016 55.049999 

sieht ich vierteljährlich Datum Zeilen benötigt (mar, Juni, September, Dezember) und die Datumsspalten konvertieren Q1- 16/Q2-16/Q3-16 usw.

Code:

DF_sp = pd.read_csv(shareprice, index_col = 'Date', parse_dates =[0]) 
DF_Q= DF_sp.groupby(pd.TimeGrouper('Q')).nth(-1) 
DF_Q['Qx-YY'] = ???? 

Antwort

1

können Sie Series.dt.to_period verwenden und dann dt.quarter mit dt.year, aber zuerst müssenkonvertieren 210:

df = df.groupby(df.Date.dt.to_period('Q')).Open.mean() 
print (df) 
Date 
2016Q2 52.496666 
2016Q3 54.913332 
2016Q4 58.690000 
Freq: Q-DEC, Name: Open, dtype: float64 

df.index = 'Q' + df.index.to_series().dt.quarter.astype(str) + '-' 
       + df.index.to_series().dt.year.astype(str).str[2:] 
print (df) 
Date 
Q2-16 52.496666 
Q3-16 54.913332 
Q4-16 58.690000 
Name: Open, dtype: float64 

Eine andere Lösung:

df = df.groupby(df.Date.dt.to_period('Q')).Open.mean() 
print (df) 
Date 
2016Q2 52.496666 
2016Q3 54.913332 
2016Q4 58.690000 
Freq: Q-DEC, Name: Open, dtype: float64 

y = df.index.strftime('%y') 
df.index = df.index.quarter.astype(str) 
df.index = 'Q' + df.index + '-' + y 
print (df) 
Q2-16 52.496666 
Q3-16 54.913332 
Q4-16 58.690000 
Name: Open, dtype: float64 

Die beste period.Period.strftime ist verwenden - Link aus alten Dokumentation aber funktioniert sehr gut:

df = df.groupby(df.Date.dt.to_period('Q')).Open.mean() 
print (df) 
Date 
2016Q2 52.496666 
2016Q3 54.913332 
2016Q4 58.690000 
Freq: Q-DEC, Name: Open, dtype: float64 

df.index = df.index.strftime('Q%q-%y') 
print (df) 
Q2-16 52.496666 
Q3-16 54.913332 
Q4-16 58.690000 
Name: Open, dtype: float64 
+0

dies nicht idiomatischen ist; Verwenden Sie .strftime mit einem Period-Index, wenn Sie ihn wirklich als String formatieren müssen (was überhaupt nicht empfohlen wird) – Jeff

+0

@Jeff - aber wie kommt es zu Viertel in der Strftzeit? Ich kann keine Lösung dafür finden. – jezrael

+0

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#time-span-representation – Jeff