使用 pandas 的两组在 6 周内的增量支出
Incremental spend in 6 weeks for two groups using pandas
我有一个 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
根据以上信息,我需要计算整个测试组(test-Red 和 test-NonRed)与对照组在六周内的增量支出。我需要绝对值 ($) 和 % 的形式。
我试过 pandas 作为,
df2= df.groupby(by=['Group','Week']).sum().abs().groupby(level=[0]).cumsum()
我得到以下结果,
df2.head()
然后我计算了每组的总和,
df2.groupby(by=['group2']).sum()
df2.head()
我希望将它们(增量支出)作为我尝试过的绝对值 abs()
,以及我需要它的绝对值 percentage.Any 帮助将不胜感激,
预期结果是计算总测试组(测试-红色和测试-非红色)与控制组在六周内的增量支出。我需要它的绝对支出,然后是这 6 周的 percentage.The 增量支出。像这样,
Group incremental_spend incremental_%
Control 11450175 #%
test-NonRed 50288158 #%
test-Red 12043938 #%
所以我真正的问题是,
1. 上述方法是否是计算 Spend
列 Week
6 周内列 Group
增量支出的正确方法?
2. 此外,我需要所有结果的绝对计数和绝对百分比
我认为这里有几个问题使您的回答难以理解。
词汇
你所说的"Incremental spend"就是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
看起来像你想要的吗?
我有一个 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
根据以上信息,我需要计算整个测试组(test-Red 和 test-NonRed)与对照组在六周内的增量支出。我需要绝对值 ($) 和 % 的形式。 我试过 pandas 作为,
df2= df.groupby(by=['Group','Week']).sum().abs().groupby(level=[0]).cumsum()
我得到以下结果,
df2.head()
然后我计算了每组的总和,
df2.groupby(by=['group2']).sum()
df2.head()
我希望将它们(增量支出)作为我尝试过的绝对值 abs()
,以及我需要它的绝对值 percentage.Any 帮助将不胜感激,
预期结果是计算总测试组(测试-红色和测试-非红色)与控制组在六周内的增量支出。我需要它的绝对支出,然后是这 6 周的 percentage.The 增量支出。像这样,
Group incremental_spend incremental_%
Control 11450175 #%
test-NonRed 50288158 #%
test-Red 12043938 #%
所以我真正的问题是,
1. 上述方法是否是计算 Spend
列 Week
6 周内列 Group
增量支出的正确方法?
2. 此外,我需要所有结果的绝对计数和绝对百分比
我认为这里有几个问题使您的回答难以理解。
词汇
你所说的"Incremental spend"就是
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
看起来像你想要的吗?