2016-06-09 52 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