2014-12-04 92 views
1

我有一個非常簡單的數據集:繪製大熊貓GROUPBY導致

Customer Amount 
A   1.25 
B   2 
C   1 
A   5 
D   2 
B   10 

我希望得到以下結果:

Customer Amount Number_of_transactions 
A  6.25 2 
B  12  2 
C  1  1 
D  1  2 

我解決的方法是添加另一列所有值是1,然後使用df.groupby('Customer')。

  1. 有沒有更有效的方式來做到這一點?
  2. 我需要繪製number_of_transactions量的分佈和分配。每當我嘗試這樣做時,我會得到關鍵錯誤(我認爲是因爲groupby)。有人能指出正確的方向嗎?
+0

你說的分佈是什麼意思?兩個直方圖? – elyase 2014-12-04 23:12:26

+0

是的。直方圖 – user201411 2014-12-04 23:15:32

回答

0

試試這個:

>>> df['Number_of_transactions'] = 1 
>>> df1 = df.pivot_table(index='Customer', 
         values=['Amount', 'Number_of_transactions'], 
         aggfunc=np.sum)\ 
      .reset_index()     # reset_index is optional 
>>> df1 

Out[21]: 
    Customer Amount Number_of_transactions 
0 A   6.25 2 
1 B   12.00 2 
2 C   1.00 1 
3 D   2.00 1 

對於情節只是做:

>>> df1.hist(bin=50) 
0

我不知道你想作爲一個情節是什麼,但對於第一部分,你可以做這個:

new_df = pd.concat([df.groupby(df.Customer).Amount.sum(), 
        df.Customer.value_counts()], axis=1) 

new_df.columns = ["Amounts","Number_of_transactions"] 

然後如果你可以有一個條形圖:

new_df.plot(kind="bar") 

,或者如果你wan't直方圖:

new_df.hist()