我有在excel中按天数排序的数据,现在我想要做的是获取每天的日收益之和。这里的问题是我最近有多次输入。因此,我可能只有一个2018-12-05的每日回报条目,但有五个2018-12-06的条目。我希望我在2018年12月6日只收到一份条目,其中包含每日累计收益(因此所有累计收益加在一起)和平均每日收益(因此累计收益除以当天的条目数量)。 2018-12-06这将被5除以。
所以我现在拥有的数据如下:
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
最终的数据框应如下图所示
HEAD@{2}
到目前为止,我具有以下代码来汇总每日收益。但是,它不能正确求和。而且我不知道如何实现平均每日收益。
Dates Last.Price Daily.Return
19788 2018-11-23 75.18 -0.001199
19789 2018-11-23 129.04 -0.026490
19790 2018-11-26 77.84 -0.035382
19791 2018-11-26 127.98 0.008215
19792 2018-11-27 79.50 -0.021326
19793 2018-11-27 122.68 0.041413
19794 2018-11-28 80.27 -0.009686
19795 2018-11-29 80.00 0.003364
如前所述,此代码不能正确汇总每日收益。而且我不知道如何获得这几天的平均回报。
答案 0 :(得分:1)
我认为您需要使用agg
,first
和sum
函数通过mean
进行聚合:
由于列Daily.Return
由列表中定义的多个函数聚合,因此在输出中获得MultiIndex
。因此有必要将其展平-最简单的做法是将map
与join
一起使用。
df = df.groupby('Dates').agg({'Last.Price':'first', 'Daily.Return':['mean','sum']})
print (df)
Last.Price Daily.Return
first mean sum
Dates
2018-11-23 75.18 -0.013844 -0.027689
2018-11-26 77.84 -0.013583 -0.027167
2018-11-27 79.50 0.010044 0.020087
2018-11-28 80.27 -0.009686 -0.009686
2018-11-29 80.00 0.003364 0.003364
print (df.columns)
MultiIndex(levels=[['Last.Price', 'Daily.Return'], ['first', 'mean', 'sum']],
labels=[[0, 1, 1], [0, 1, 2]])
df.columns = df.columns.map('_'.join)
print (df)
Last.Price_first Daily.Return_mean Daily.Return_sum
Dates
2018-11-23 75.18 -0.013844 -0.027689
2018-11-26 77.84 -0.013583 -0.027167
2018-11-27 79.50 0.010044 0.020087
2018-11-28 80.27 -0.009686 -0.009686
2018-11-29 80.00 0.003364 0.003364
最后rename
个列:
d = {'Last.Price_first':'Last.Price',
'Daily.Return_sum': 'Cum.Return',
'Daily.Return_mean': 'Average.Return'}
df = df.rename(columns=d)
print (df)
Last.Price Average.Return Cum.Return
Dates
2018-11-23 75.18 -0.013844 -0.027689
2018-11-26 77.84 -0.013583 -0.027167
2018-11-27 79.50 0.010044 0.020087
2018-11-28 80.27 -0.009686 -0.009686
2018-11-29 80.00 0.003364 0.003364