绘制pandas groupby结果

时间:2014-12-04 22:49:11

标签: python pandas

我有一个非常简单的数据集:

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)。有人能指出正确的方向吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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")

或者如果您想要直方图:

new_df.hist()