在pandas数据框中聚合值和总计

时间:2017-09-08 23:00:58

标签: python pandas dataframe group-by aggregate

以下是我要做的事情,pandas数据框中的示例数据说df是:

ID  Date    Amount

A   5/11/16      5
B   12/10/16    27
B   13/10/16    45
B   14/10/16    2
A   5/12/16     89
C   28/1/16     34
D   29/8/16     12
D   20/5/16     12
C   2/1/17      90

对于每个ID,我想要列表中的日期(天数),另一个列表中的金额,最终列表中的金额总和。

输出为:

A [30] [5,89] [94]

B [01,01] [27,45,2] [74]..

我试图对databy进行分组:

df = df.groupby(' ID')['金额']。apply(list)

这给了我按列表中的ID和金额分组的数据,但我无法计算如何在日期中获得差异。

1 个答案:

答案 0 :(得分:0)

你可以通过ID分组并执行一些聚合。

df.Date = pd.to_datetime(df.Date, format='%d/%m/%y') # convert to a date column
df = df.groupby('ID').agg({'Date' : lambda x: x.diff().dropna().dt.days, \
                           'Amount' : [lambda y: y.values.tolist(), 'sum']})
df.columns = ['Diff', 'Amount', 'Total']

df

      Diff       Amount  Total
ID                            
A       30      [5, 89]     94
B   [1, 1]  [27, 45, 2]     74
C      340     [34, 90]    124
D     -101     [12, 12]     24