2000-01 2000-02 2000-03 2000 -04 ...... 2016-08
0 1010 43453 5564 45545 15555
1 4565 44646 8989 56565 56565
我有一个像这样的数据框。我需要添加一些像“2000q1”这样的列,这意味着2000-01,2000-02,2000-03的平均值。因此,第4-6个月是q2,第7-9个月是q3,第10个月是q4。 我认为结果应该是这样的:
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值。
答案 0 :(得分:1)
您可以将列标题转换为datetime
,然后转换为to_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