Ich habe eine Datenmenge bestehend aus IDs, von denen jede über eine Teilmenge einer Reihe von Zeitstempeln besteht. Es gibt 1813 Zeitstempel [0, ..., 1812] und einige IDs existieren über alle Zeitstempel, einige über den Bereich (0, n), einige über (n, m) und einige über (m, 1812). Jede ID hat an jedem vorhandenen Zeitstempel 108 Merkmale.Auffüllen einer Dimension von NDarray mit 0s
I erstellen derzeit ein ndarray
mit der folgenden Zeile:
# Shape: (1424, ?, 108) = (numIDs, numIDTimestamps, numFeatures)
inputMatrix = np.array([df.loc[df['id'] == ID, [feature for feature in features]].as_matrix() for ID in IDs])
hier jedes Element in der Abmessung 1 ist mit einer Länge gleich die Anzahl von Zeitstempeln, dass diese über ID existiert. Stattdessen muß ich jedes Element in dieser Dimension der Länge 1813 sein, für eine bestimmte ID jeden nicht vorhandenen Zeitstempel Klotzen mit einer Reihe 0s der Länge 108
In Pseudo-Code:
for each ID:
for each timestamps:
if ID exists at timestamp:
append its array of 108 features
else:
append array of 108 0s
Was ist die Effizienter, pythonischer Weg, dies auf ähnliche Weise zu erreichen, wie ich es vorher getan habe?
EDIT
Hier ist ein Beispiel Struktur meines Datensatz, die ich in einen Pandas Datenrahmen zu importieren:
id timestamp derived_0 ... technical_108 y
10 0 0.370326 ... NaN -0.011753
11 0 0.014765 ... NaN -0.001240
12 0 -0.010622 ... NaN -0.020940
25 0 NaN ... NaN -0.015959
26 0 0.176693 ... NaN -0.007338
... ... ... ... ... ...
2150 1812 -0.123364 ... 0.001004 0.004604
2151 1812 -10.437184 ... 0.044597 -0.009241
2154 1812 -0.077930 ... 0.030816 -0.006852
2156 1812 -0.269845 ... -0.011706 -0.000785
2158 1812 NaN ... NaN 0.003497
Und das ist die Verarbeitung Ich habe oben auf die imputMatrix
Linie getan:
"Nach letzten Zeitstempel sortieren" bedeutet, dass die Zeilen des DataFrames neu geordnet werden, so dass die IDs mit t Der unterste Zeitstempel ist der erste und wird immer noch nach ihren Zeitstempeln geordnet.
z:
id timestamp ...
1314 0 ...
1314 1
1314 2
1699 0
1699 1
1699 2
1699 3
...
Eine Beispieldaten wäre wirklich hilfreich – Dark
Hinzugefügt in meiner Bearbeitung. – KOB
Sie wollen also sagen, dass Sie für jeden eindeutigen Zeitstempel leere Zeilen von 0s hinzufügen müssen, um ihre Länge 1813 zu erhalten? – Dark