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 个月是第 2 季度,第 7-9 个月是第 3 季度,第 10-12 个月是第 4 季度。我认为结果应该是这样的:
2000q1 2000q2 2000q3 2000q4 2001q1......2016q3
16675.67 15615 ...................................
19400 55665 ...................................
我认为第一步是将列转换为日期时间。
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值。
您可以将列标题转换为datetime
,然后转换为Quarters的to_period
,按列名分组并计算沿行方向的平均值:
示例:
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
我是一名优秀的程序员,十分优秀!