我有一份包含以下信息的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()
然后我计算了每个组的总和,
df2.groupby(by=['group2']).sum()
df2.head()
我希望将它们(增量花费)作为我abs()
尝试的绝对值,以及我需要它的绝对百分比。任何帮助都会非常感激,
预期结果是计算总测试组(测试红色和测试非红色)与对照的六周内增量支出。我需要它在绝对花费,然后它的百分比.6周的增量花费。像这样的东西,
Group incremental_spend incremental_%
Control 11450175 #%
test-NonRed 50288158 #%
test-Red 12043938 #%
所以我真正的问题,
1.上述方法是否是Group
列Week
中6周内Spend
列增量支出的正确方法?
2.此外,我需要所有结果绝对计数和绝对%
答案 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
它看起来像你想要的吗?