2017-02-22 16 views
2
2000-01 2000-02 2000-03 2000 -04 ...... 2016-08 
0 1010  43453  5564  45545   15555 
1 4565  44646  8989  56565   56565 

У меня есть dataframe как this.I нужно добавить несколько столбцов, как «2000q1», что означает средние значения 2000-01,2000-02,2000- 03. Таким образом, месяц 4-6 - q2, месяц 7-9 - q3, месяц 10-12 - q4. Я думаю, что результат должен быть таким:Как преобразовать дату Year.Q в DataFrame появляются две

2000q1  2000q2 2000q3 2000q4 2001q1......2016q3 
16675.67  15615  ................................... 
19400  55665  ................................... 

Я думаю, что первый шаг должен преобразовать столбцы DateTime.

import pandas as pd 
df.columns.map(pd.to_datetime) 

Но я не знаю, что следующий шаг


У меня есть идея, но она не работает. Я использую цикл.

d = [] 
for i in range(2000,2017): 
    i=str(i) 
    d.append(i+'q'+str(1)) 
    d.append(i+'q'+str(2)) 
    d.append(i+'q'+str(3)) 
    d.append(i+'q'+str(4)) 
#I create a list contains the date I need. Next step is put mean values in. 
d = d[:-1] #remove 2016q4 from list because the date untill 2016-08 
for date in d: 
    for a in range(0,201,3): 
     average = np.mean(df.iloc[:,a:a+3]) 
     df[date] = average 

Но результат показывает, что в новых столбцах указаны значения NaN.

ответ

1

Вы можете преобразовать заголовки столбцов, а затем datetimeto_period из Quarters, группы по именам столбцов и вычислить среднее вдоль направления строки:

Пример:

import pandas as pd 

df 
#2000-01 2000-02 2000-03 2000-04 
#0 1010 43453  5564 45545 
#1 4565 44646  8989 56565 

df.columns = pd.to_datetime(df.columns, format="%Y-%m").to_period("Q")  
df.groupby(level=0, axis=1).mean() 

#   2000Q1  2000Q2 
#0 16675.666667 45545.0 
#1 19400.000000 56565.0 
+1

Он работает. Кстати, как я могу узнать панд? Если бы я не столкнулся с этой проблемой, я никогда не узнаю, что произошло ... –