将财政周数据汇总为熊猫月度总和

时间:2016-07-06 22:47:11

标签: python pandas

我有一个如下所示的数据集:

      YR_FW    YIELD
0    201401     12.3
1    201402     10.2
2    201403     7.2
3    201404     8.0
4    201405     1.2
...  ....     ....
96   201446     102.3
97   201447     101.7
98   201448     89.5
99   201449     72.2
100  201450     88.0
101  201451     98.89

我想汇总(总和)这样我有12个月。它可能看起来像这样:

Months    Summed_YLD
1            value
2            value
...         ...
11           value
12           value

注意:YR_FW有时缺少值。例如,201427不在数据框中。

注意2:如果案例重叠,则应将它们汇总到结束月份。本周从星期一开始,到星期日结束(这不是5天的一周)。

2 个答案:

答案 0 :(得分:3)

我会先将这些转换为日期时间:

In [11]: df["YR_FW"] = pd.to_datetime(df["YR_FW"].astype("str") + "-0", format="%Y%W-%w")

In [12]: df
Out[12]:
       YR_FW  YIELD
0 2014-01-12   12.3
1 2014-01-19   10.2
2 2014-01-26    7.2
3 2014-02-02    8.0
4 2014-02-09    1.2

请注意,%W指定周从星期一开始,而'-0'指定在一周内进行星期日。因此,结果日期将是指定周的最后一天。

现在,您可以使用dt访问者来提取一周中的最后一天:

In [13]: df.groupby(df["YR_FW"].dt.month).sum()
Out[13]:
       YIELD
YR_FW       
1       29.7
2        9.2

答案 1 :(得分:0)

不幸的是,我没有足够的数据来完全检查代码,但这就是我现在到达的内容。如果我们假设我们有:

import pandas as pd
import numpy as np

df = pd.DataFrame({"YR_FW":[201401,201402,201403,201405,201506],"YIELD":[12.3,10.2,7.2,1.2,3.8]})

     YR_FW    YIELD
0    201401     12.3
1    201402     10.2
2    201403     7.2
3    201405     1.2
4    201506     3.8

缺少第3行以符合您的实际数据,并添加了不同的年份。我们可以按照以下步骤进行:

df_pd_range = pd.period_range("01/01/2014","02/07/2016", freq="W") #Here you place the period of your data, I elongated till 2016 to test code
df.YR_FW = df.YR_FW.astype(str).map(lambda a_: a_[:4] + "-" + a_[4:])
a_ = [np.logical_and(df_pd_range.year == int(df.YR_FW.iloc[i][:4]),df_pd_range.week==int(df.YR_FW.iloc[i][5:])) for i in range(len(df))] #choose only the period that is present in the data
b_ = [df_pd_range[i][0] for i in a_]
arrays = [[i.year for i in b_],[i.month for i in b_] ]
index = pd.MultiIndex.from_arrays(arrays, names=["year", "month"])
df.set_index(index, inplace=True)
df.groupby(level=[0,1]).mean() #Here you obtain mean data grouped by week and year

告诉我它是怎么回事