我有一个如下所示的数据集:
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天的一周)。
答案 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
告诉我它是怎么回事