2016-06-09 50 views
0

enter image description here如何处理这个数据帧中的大熊猫

我想操纵上述大熊猫据帧“的每一天,以第一次登录< 14天”‘连锁销售’找到的百分比,并通过每天分组,以有这样的答案:“5月1日,20%的网络销售用户,而其他销售渠道的5%用户在14天内登录”

那么我可以绘制所有销售渠道的时间线图基于这些百分比数字。

请告诉我该怎么做。谢谢。

+0

才能添加所需的输入输出的Dataframe'的'提取物? – jezrael

回答

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 

我希望这个代码工作,因为我没有一个代码创建数据帧我无法测试它。

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