python-3.x - pandas - 基于交易数量和日期的日期总持有量
问题描述
我希望能够根据交易表在某个时间点确定持有量,就像这样......
transaction date amount
initial 2018-10-12 3
additional1 2018-10-13 1
additional2 2018-10-15 5
输出将显示选定日期范围内每个日期的馆藏...
date holdings
2018-10-11 0
2018-10-12 3
2018-10-13 4
2018-10-14 4
2018-10-15 9
我觉得这种类型的问题之前一定已经在stackoverflow上的某个地方得到了回答,但是如果我能找到它,那就麻烦我了!
我首先使用选定的日期范围填充数据框索引:
pd.DataFrame(index=pd.date_range(start='2018-10-11', end=date.today()))
我在想下一步是使用带有 groupby 和 cumsum 的 for 循环,但我无法解决。还担心在大型数据集上使用循环会很慢。
任何帮助将非常感激。
解决方案
使用这样的东西:
In [186]: df1
Out[186]:
amount date
0 3 2018-10-12
1 1 2018-10-13
2 5 2018-10-15
In [188]: df
Out[188]:
date
0 2018-10-11
1 2018-10-12
2 2018-10-13
3 2018-10-14
4 2018-10-15
5 2018-10-16
In [192]: d2 = pd.merge(df,df1,on='date', how='left')
In [193]: d2['cumulative'] = d2.amount.cumsum()
In [195]: d2
Out[195]:
date amount cumulative
0 2018-10-11 NaN NaN
1 2018-10-12 3.0 3.0
2 2018-10-13 1.0 4.0
3 2018-10-14 NaN NaN
4 2018-10-15 5.0 9.0
5 2018-10-16 NaN NaN
In [202]: d2 = d2.fillna(method='ffill')
In [203]: d2
Out[203]:
date amount cumulative
0 2018-10-11 NaN NaN
1 2018-10-12 3.0 3.0
2 2018-10-13 1.0 4.0
3 2018-10-14 1.0 4.0
4 2018-10-15 5.0 9.0
5 2018-10-16 5.0 9.0
推荐阅读
- javascript - JavaScript 只读属性不起作用
- c# - c#如何从数据库中的元素中找到一个id
- python - Python检查日期范围内的两个日期
- c++ - 复数算术出错
- unity3d - dontDestroyOnLoad 在不同场景中的问题
- python - 如果字母和数字正确,我如何打印更多的 dict 网格?
- firebase - FLUTTER:如何在流构建器中使用导航器?
- r - 如何从R字符串中提取某些单词?
- reactjs - 尝试将响应数组映射到状态对象时出现未处理的拒绝错误
- java - Vs Code java The import cannot be resolved