以下是我要做的事情,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和金额分组的数据,但我无法计算如何在日期中获得差异。
答案 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