熊猫-基于交易量和日期的日期总持有量

时间:2018-10-16 09:49:42

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用类似这样的内容:

    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