考虑不同日期的仓库库存

day action  quantity symbol
0   1         40      a
1   1         53      b
2   -1        21      a
3   1         21      b
4   -1         2      a
5   1         42      b


在这里,day代表时间序列,action代表特定产品(buy/sell)和symbolquantity
对于此数据框,我如何计算每种产品的每日累计总和。
基本上,结果数据帧如下:

days    a   b
0       40  0
1       40  53
2       19  53
3       19  64
4       17  64
5       17  106


我用groupby尝试了cumsum()并没有成功

最佳答案

使用pivot_table

In [920]: dff = df.pivot_table(
                   index=['day', 'action'], columns='symbol',
                   values='quantity').reset_index()
In [921]: dff
Out[921]:
symbol  day  action     a     b
0         0       1  40.0   NaN
1         1       1   NaN  53.0
2         2      -1  21.0   NaN
3         3       1   NaN  21.0
4         4      -1   2.0   NaN
5         5       1   NaN  42.0


然后,执行mul操作,执行cumsum,向前填充缺失值,最后将NaN替换为0

In [922]: dff[['a', 'b']].mul(df.action, 0).cumsum().ffill().fillna(0)
Out[922]:
symbol     a      b
0       40.0    0.0
1       40.0   53.0
2       19.0   53.0
3       19.0   74.0
4       17.0   74.0
5       17.0  116.0


最后结果

In [926]: dff[['a', 'b']].mul(df.action, 0).cumsum().ffill().fillna(0).join(df.day)
Out[926]:
      a      b  day
0  40.0    0.0    0
1  40.0   53.0    1
2  19.0   53.0    2
3  19.0   74.0    3
4  17.0   74.0    4
5  17.0  116.0    5

关于python - Pandas 仓库中的累积库存总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45658212/

10-13 09:51