我想操纵上面的pandas Dataframe来找到'第一次登录的天数< 14天“每个'销售链'并按天分组,得到如下答案:”5月1日,20%的网络销售用户,而其他销售渠道的5%用户在14天内登录“
那么我可以根据这些百分比数字绘制所有销售渠道的折线图。
请告诉我该怎么做。谢谢。
答案 0 :(得分:0)
您可以使用以下内容计算(而不是百分比)
dataframe['amount'] = 1
output = dataframe.groupby(['Opened','Sales chain', 'Days to 1st login < 14 days'],as_index = False).sum()
然后计算百分比似乎相对容易。如果您的数据框架不大,则可以迭代行:
for i in range(len(output)/2):
temp = output.amount[i]+output.amount[i+1]
output.amount[i] /= 1.*temp
output.amount[i+1] /= 1.*temp
我希望此代码有效,因为由于我没有创建数据帧的代码,因此我无法对其进行测试。
答案 1 :(得分:0)
您可以使用交叉表
In [29]: df
Out[29]:
Opened Sales Chain Days to 1st login <14
0 140936 02.05.2015 Others Yes
1 140937 02.05.2015 Others No
2 140938 02.05.2015 Aspa No
3 140939 02.05.2015 Others Yes
4 140940 02.05.2015 Others No
5 140941 02.05.2015 Others No
6 140942 02.05.2015 Aspa No
7 140943 02.05.2015 Others Yes
8 140944 02.05.2015 Web No
9 140945 01.05.2015 Web No
10 140946 01.05.2015 Web No
In [30]: df_counts = pd.crosstab([df['Sales'], df['Chain']], df['Days to 1st login <14'])
In [31]: df_counts
Out[31]:
Days to 1st login <14 No Yes
Sales Chain
01.05.2015 Web 2 0
02.05.2015 Aspa 2 0
Others 3 3
Web 1 0
In [32]: 100 * df_counts['Yes'] / (df_counts['Yes'] + df_counts['No'])
Out[32]:
Sales Chain
01.05.2015 Web 0.0
02.05.2015 Aspa 0.0
Others 50.0
Web 0.0
dtype: float64
使用 groupby 和应用 或更简单
In [33]: df.groupby(['Sales', 'Chain']).apply(lambda x: 100 * len(x[x['Days to 1st login <14'] == 'Yes']) / len(x))
Out[33]:
Sales Chain
01.05.2015 Web 0.0
02.05.2015 Aspa 0.0
Others 50.0
Web 0.0
dtype: float64