Палец вверх -1
Перевод
Перевод

Агрегирование значений и итогов в кадре данных панд

Вот то, что я пытаюсь сделать, Пример данных в пандас-фрейме данных говорит, что 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

Для каждого идентификатора мне нужна разница дат (количество дней) в списке, суммы в другом списке, сумма сумм в окончательном списке.

Выход будет:

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

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

Я попытался сгруппировать данные:

df = df.groupby ('ID') ['Amount']. apply (список)

это дает мне данные, сгруппированные по ID и сумме в списке, но я не могу понять, как получить разницу в датах.

python pandas dataframe group-by aggregate
задан harold_noobie 9 сент. 2017 г., 2:00:58
источник

1 ответ

Решение 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
ответ дан coldspeed 9 сент. 2017 г., 2:35:58
источник