使用大熊猫的两组人员在6周内增加支出

时间:2017-11-01 12:54:29

标签: python pandas increment cumsum

我有一份包含以下信息的Excel数据,

df.head()
   User_id  Group   Week    Spend   Purchases   Group
170309867   Test    2014-10-13  794.66  2   Test-NonRed
57954586    Test    2014-10-13  55.99   1   Test-Red
118068583   Test    2014-10-13  40.87   1   Test-NonRed
516478393   Test    2014-10-13  17.5    2   Test-NonRed
457873235   Test    2014-10-13  20.44   1   Test-Red

根据以上信息,我需要计算总测试组(测试红色和测试非红色)与对照组在六周内的增量支出。我需要绝对($)和%条款。 我曾尝试过熊猫,

  df2= df.groupby(by=['Group','Week']).sum().abs().groupby(level=[0]).cumsum()

我有以下结果,

df2.head()

enter image description here

然后我计算了每个组的总和,

    df2.groupby(by=['group2']).sum()
df2.head()

enter image description here

我希望将它们(增量花费)作为我abs()尝试的绝对值,以及我需要它的绝对百分比。任何帮助都会非常感激,

预期结果是计算总测试组(测试红色和测试非红色)与对照的六周内增量支出。我需要它在绝对花费,然后它的百分比.6周的增量花费。像这样的东西,

 Group   incremental_spend  incremental_%       
    Control     11450175         #%
    test-NonRed 50288158         #%
    test-Red    12043938         #%

所以我真正的问题, 1.上述方法是否是GroupWeek中6周内Spend列增量支出的正确方法? 2.此外,我需要所有结果绝对计数和绝对%

1 个答案:

答案 0 :(得分:1)

我认为这里存在一些问题,使您的答案难以理解。

词汇

  • 您描述为"增量支出"只是sum。 你分两步做的是累计金额.cumsum().sum()的总和,这是不对的。

  • 此外,我不确定您是否需要abs,它给出绝对值(abs(-1)给出1),因此只有在有负值时才有效在你的数据中。 不幸的是,样本数据集不够大,无法得出结论。

数据集

您的数据集有两列Group,名称相同,容易出错。

缺少信息

您希望将最终值(总和)作为比率(%),但不指出此比率的参考值是多少。 它是对照组Spend的总和吗?

潜在解决方案

>>> df  # Sample dataframe with one entry as 'Control' group
Out[]:
     User_id Group        Week   Spend  Purchases      Group.1
0  170309867  Test  2014-10-13  794.66          2  Test-NonRed
1   57954586  Test  2014-10-13   55.99          1     Test-Red
2  118068583  Test  2014-10-13   40.87          1  Test-NonRed
3  516478393  Test  2014-10-13   17.50          2      Control
4  457873235  Test  2014-10-13   20.44          1     Test-Red


df2 = pd.DataFrame(df.groupby('Group.1').Spend.sum())  # Get 'Spend' sum for each group

>>> df2
Out[]:
              Spend
Group.1
Control       17.50
Test-NonRed  835.53
Test-Red      76.43

control_spend_total = df2.loc['Control'].values  # Get total spend for 'Control' group

>>> control_spend_total
Out[]: array([ 17.5])


df2['Spend_%'] = df2.Spend / control_spend_total * 100  # Add 'Spend_ratio' column

>>> df2
Out[]:
              Spend      Spend_%
Group.1
Control       17.50   100.000000
Test-NonRed  835.53  4774.457143
Test-Red      76.43   436.742857

它看起来像你想要的吗?