大熊猫仓库
的股票累计总和考虑仓库库存在不同的日子大熊猫仓库
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
特定产品(symbol
)和quantity
。
对于此数据框,如何计算每种产品的每日累计总和。
基本上,如下所得的数据帧:
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
,前进补缺失值,最后用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
最终结果替换NaN
小号
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
不错的解决方案+1。 – Dark
Upvoted。解决了我的问题。为读者起见:为了避免日子重复(针对另一种产品) - 即在同一天发生不同产品的两种不同交易,则用dff.action和df.day替换df.action与dff.day以解决重复行问题。 –
没关系,没看到pandas标签。这只是普通的Python。
试试这个:
sums = []
currentsums = {'a': 0, 'b': 0}
for i in data:
currentsums[i['symbol']] += i['action'] * i['quantity']
sums.append({'a': currentsums['a'], 'b': currentsums['b']})
需要注意的是它给比你贴,因为你错误计算了不同的结果。
在你的'b假设它是基于总和的74。对?? – Dark