In [27]: df
Out[27]: Date MSCI USA/CONSUMER DISCR
3958 2018-07-02 325.810
3959 2018-07-03 323.680
3960 2018-07-05 325.550
3961 2018-07-06 328.050
3962 2018-07-09 331.890
3963 2018-07-10 332.650
3964 2018-07-11 331.740
3965 2018-07-12 333.910
3966 2018-07-13 334.850
3967 2018-07-16 335.290
3968 2018-07-17 335.990
3969 2018-07-18 335.740
3970 2018-07-19 334.870
3971 2018-07-20 333.240
3972 2018-07-23 332.690
3973 2018-07-24 331.600
3974 2018-07-25 333.930
3975 2018-07-26 332.100
我有每日价格数据,想要计算月收益。使这个问题变得很难的原因是我的数据基于股市交易日,而不是实际日期。
数据中的月份的第一天不一定是月份的第一天(2018-07-02
,而不是2018-07-01
。)与月份的最后一天相同(不一定是实际的最后一天)每月的一天)。
我尝试过:
g = df.groupby(pd.Grouper(freq = 'M'))
g.sum()
2018-06-30 6884.610
2018-07-31 5973.580.
g_date = g.index
这不是我想要的,因为我的原始数据中不存在2018-07-31
。
如果有人可以分享他们的建议,我将不胜感激。
非常感谢您。
答案 0 :(得分:0)
您可以使用agg
做这样的事情:
g = df.groupby(pd.Grouper(freq='M', key='Date'))[['Date','MSCI USA/Consumer DISCR']]
g.agg({'Date':'max','MSCI USA/Consumer DISCR':'sum'}).reset_index(drop=True)
输出:
Date MSCI USA/Consumer DISCR
0 2018-07-26 5973.58
答案 1 :(得分:0)
如果您想在每月的第一个工作日使用freq
,也可以在BMS
中使用BM
,在最后一个工作日使用print (df.groupby(pd.Grouper(key='Date',freq = 'BMS')).sum())
MSCI
Date
2018-07-02 5973.58
,请选中Offset Aliases,例如:< / p>
library(dplyr)
df %>%
group_by(X) %>%
summarise(Y = mean(Y))