我想操纵上述大熊猫据帧“的每一天,以第一次登录< 14天”‘连锁销售’找到的百分比,并通过每天分组,以有这样的答案:“5月1日,20%的网络销售用户,而其他销售渠道的5%用户在14天内登录”
那么我可以绘制所有销售渠道的时间线图基于这些百分比数字。
请告诉我该怎么做。谢谢。
我想操纵上述大熊猫据帧“的每一天,以第一次登录< 14天”‘连锁销售’找到的百分比,并通过每天分组,以有这样的答案:“5月1日,20%的网络销售用户,而其他销售渠道的5%用户在14天内登录”
那么我可以绘制所有销售渠道的时间线图基于这些百分比数字。
请告诉我该怎么做。谢谢。
你可以有计数(而不是百分比):
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
我希望这个代码工作,因为我没有一个代码创建数据帧我无法测试它。
您可以使用交叉
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
才能添加所需的输入输出的Dataframe'的'提取物? – jezrael