大熊猫仓库中累积的库存量

时间:2017-08-13 07:45:53

标签: python pandas dataframe

考虑不同日期的仓库库存

$("#selectCrop").change(function(){   //this ajax will bring default configured crop data
                                var cropid = $("#selectCrop option:selected").val();
                                var url = "<?php echo base_url();?>index.php/user/cropConfig/getData";
                                    $.ajax({
                                    data    : {'cropid':cropid},
                                    type    : 'post',
                                    url     : url,
                                    success :function(response) {
                                        alert(response[0]['maturitydays']);
                                    }
                                    })
                                });

此处,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的{​​{1}}。
对于此数据框,如何计算每种产品的每日累计总和 基本上,结果数据框如下:

symbol

我已经尝试过使用groupby的cumsum()并且没有成功

2 个答案:

答案 0 :(得分:3)

使用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

答案 1 :(得分:0)

没关系,没看到标签。这只是普通的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']})

Try it online!

请注意,它会提供与您发布的结果不同的结果,因为您计算错误。