Ich habe einen Datenrahmen, in dem jede Instanz einen Zeitstempel hat, eine ID und eine Liste von Zahlen wie folgt:Pandas aggregierte Liste in resample/groupby
timestamp | id | lists
----------------------------------
2016-01-01 00:00:00 | 1 | [2, 10]
2016-01-01 05:00:00 | 1 | [9, 10, 3, 5]
2016-01-01 10:00:00 | 1 | [1, 10, 5]
2016-01-02 01:00:00 | 1 | [2, 6, 7]
2016-01-02 04:00:00 | 1 | [2, 6]
2016-01-01 02:00:00 | 2 | [0]
2016-01-01 08:00:00 | 2 | [10, 3, 2]
2016-01-01 14:00:00 | 2 | [0, 9, 3]
2016-01-02 03:00:00 | 2 | [0, 9, 2]
Für jeden id ich von Tag gesampelt werden soll (und das ist einfach) und verketten alle Listen der Instanzen, die am selben Tag passiert sind. Resampling + concat/Summe nicht nicht funktionieren, weil resample alle nicht-numerischen Spalten entfernt (see here)
ich etwas Ähnliches schreiben wollen:
daily_data = data.groupby('id').resample('1D').concatenate() # .concatenate() does not exist
Ergebnis gewünscht:
timestamp | id | lists
----------------------------------
2016-01-01 | 1 | [2, 10, 9, 10, 3, 5, 1, 10, 5]
2016-01-02 | 1 | [2, 6, 7, 2, 6]
2016-01-01 | 2 | [0, 10, 3, 2]
2016-01-02 | 2 | [0, 9, 3, 0, 9, 2]
Hier können Sie ein Skript kopieren, das den Eingang generiert, den ich für die Beschreibung verwendet habe:
import pandas as pd
from random import randint
time = pd.to_datetime(['2016-01-01 00:00:00', '2016-01-01 05:00:00',
'2016-01-01 10:00:00', '2016-01-02 01:00:00',
'2016-01-02 04:00:00', '2016-01-01 02:00:00',
'2016-01-01 08:00:00', '2016-01-01 14:00:00',
'2016-01-02 03:00:00' ]
)
id_1 = [1] * 5
id_2 = [2] * 4
lists = [0] * 9
for i in range(9):
l = [randint(0,10) for _ in range(randint(1,5)) ]
l = list(set(l))
lists[i] = l
data = {'timestamp': time, 'id': id_1 + id_2, 'lists': lists}
example = pd.DataFrame(data=data)
Bonuspunkte, wenn es möglich ist, Duplikate in der verketteten Liste optional zu entfernen.
Das löst mein Problem! Ich habe den gleichen Code verwendet, aber ohne den Spaltennamen "lists" angegeben zu haben und nur timestamp und id zurückgegeben. Vielen Dank :-) – Ludovica