首页 > 解决方案 > 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 循环,但我无法解决。还担心在大型数据集上使用循环会很慢。

任何帮助将非常感激。

标签: python-3.xpandas

解决方案


使用这样的东西:

    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

推荐阅读