2014-12-04 91 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()