Ich habe einen Pandas DataFrame mit 5 Spalten.Pandas, sortieren einen Datenrahmen in einer nützlichen Weise, um den Unterschied zwischen Zeiten zu finden. Warum erscheinen Schlüssel- und Wertfehler?
['date', 'sensorId', 'readerId', 'rssi']
df_json['time'] = df_json.date.dt.time
Ich möchte Menschen finden, die einen Laden betreten haben (rssi> 380). Dies wäre jedoch viel genauer, wenn ich auch jeden Datensatz überprüfen könnte, in dem eine Sensor-ID erscheint, und ob die Zeit in diesem Datensatz innerhalb von 5 Sekunden nach dem aktuellen Datensatz liegt.
Daten aus dem Datenrahmen. (Df_json)
date sensorId readerId rssi
0 2017-03-17 09:15:59.453 4000068 76 352
0 2017-03-17 09:20:17.708 4000068 56 374
1 2017-03-17 09:20:42.561 4000068 60 392
0 2017-03-17 09:44:21.728 4000514 76 352
0 2017-03-17 10:32:45.227 4000461 76 332
0 2017-03-17 12:47:06.639 4000046 43 364
0 2017-03-17 12:49:34.438 4000046 62 423
0 2017-03-17 12:52:28.430 4000072 62 430
1 2017-03-17 12:52:32.593 4000072 62 394
0 2017-03-17 12:53:17.708 4000917 76 335
0 2017-03-17 12:54:24.848 4000072 25 402
1 2017-03-17 12:54:35.738 4000072 20 373
Ich möchte jezrael Antwort von df [ 'date'] verwenden diff(). Allerdings kann ich dies nicht erfolgreich nutzen, ich erhalte viele verschiedene Fehler. Die Spalte ['Datum'] hat den Typ datetime64 [ns].
Wie die Daten gespeichert sind oben nicht sinnvoll ist, für die .diff() nach einem zu verwenden, die Daten wie unten (dfEntered) gespeichert werden müssen:
Beispieldaten: dfEntered
date sensorId readerId time rssi
2017-03-17 4000046 43 12:47:06.639000 364
62 12:49:34.438000 423
4000068 56 09:20:17.708000 374
60 09:20:42.561000 392
76 09:15:59.453000 352
4000072 20 12:54:35.738000 373
12:54:42.673000 374
25 12:54:24.848000 402
12:54:39.723000 406
62 12:52:28.430000 430
12:52:32.593000 394
4000236 18 13:28:14.834000 411
Ich plane, "Zeit" durch "Datum" zu ersetzen. Zeit ist von dtype Objekt und ich kann nicht scheinen, es zu werfen oder diff() it.'date 'wird genauso nützlich sein.
Der einzige Weg, (ich habe gefunden) von df_json mit erscheinen als dfEntered mit ist: dfEntered = df_json.groupby (von = [df_json.date.dt.time, 'SensorID', 'readerId', 'date' ])
Wenn ich tun:
dfEntered = df_json.groupby(by=[df_json.date.dt.time, 'sensorId', 'readerId'])['date'].diff()
Ergebnisse in:
File "processData.py", line 61, in <module>
dfEntered = df_json.groupby(by=[df_json.date.dt.date, 'sensorId', 'readerId', 'rssi'])['date'].diff()
File "<string>", line 17, in diff
File "C:\Users\danie\Anaconda2\lib\site-packages\pandas\core\groupby.py", line 614, in wrapper
raise ValueError
ValueError
Wenn ich tun:
dfEntered = df_json.groupby(by=[df_json.date.dt.date, 'sensorId', 'readerId', 'rssi'])['time'].count()
print(dfEntered['date'])
Ergebnisse in:
File "processData.py", line 65, in <module>
print(dfEntered['date'])
File "C:\Users\danie\Anaconda2\lib\site-packages\pandas\core\series.py", line 601, in __getitem__
result = self.index.get_value(self, key)
File "C:\Users\danie\Anaconda2\lib\site-packages\pandas\core\indexes\multi.py", line 821, in get_value
raise e1
KeyError: 'date'
angewendet ich eine .count() an die groupby nur so, dass ich ausgeben kann es. Ich hatte vorher eine .agg ({'date': 'diff'}) versucht, die in den valueError resluts, aber der dtype ist datetime64 [ns] (atleast in der ursprünglichen df_json, kann ich nicht den dtype von dfEntered ['date' ]
wenn die oben funktionieren würde ich eine df haben möchte [df_json.date.dt.date, ‚SensorID‘, ‚readerId‘, ‚Maske‘] Maske wahr, wenn sie einen Laden betreten.
ich dann die unten df haben (enthält sensorIds, die einen Text erhalten haben) ich am Tag, SensorID, readerId die beiden zusammen fusionieren dann möchte
sensor_id sms_status date_report rssi readerId
0 5990100 SUCCESS 2017-05-03 13:41:28.412800 500 10
1 5990001 SUCCESS 2017-05-03 13:41:28.412800 500 11
2 5990100 SUCCESS 2017-05-03 13:41:30.413000 500 12
3 5990001 SUCCESS 2017-05-03 13:41:31.413100 500 13
4 5990100 SUCCESS 2017-05-03 13:41:34.413400 500 14
5 5990001 SUCCESS 2017-05-03 13:41:35.413500 500 52
6 5990100 SUCCESS 2017-05-03 13:41:38.413800 500 60
7 5990001 SUCCESS 2017-05-03 13:41:39.413900 500 61
. ich hoffe, dass resu würde In einem df, das als [df_json.date.dt.date, 'sensorId', 'readerId', 'mask'] erscheinen könnte, könnte ich sagen, dass eine sensorId mit einer Maske von true eine Konvertierung ist. Eine Umwandlung war, dass sensorId an diesem Tag einen Text erhielt und an diesem Tag auch in den Laden kam.
Ich fange an, vorsichtig zu bekommen, dass mein Ende Ziel nicht einmal erreichbar ist, da ich einfach nicht verstehen, wie Pandas funktioniert noch: D (verdammt Fehler)
UPDATE
dfEntered = dfEntered.reset_index()
Damit kann ich auf das Datum zugreifen und ein Diff anwenden.
Ich verstehe nicht ganz die Theorie, wie dieses Problem aufgetreten ist, und warum reset_index() dies behoben.
Es ist ein wenig unklar 'everyOtherRecord.contains (specifc ID) [ 'Zeit'] - [ 'Zeit' ]> 00: 00: 05' - Können Sie ein Datenmuster hinzufügen - 5-8 Zeilen? Benutze meine Probe kostenlos aus meiner Antwort. – jezrael
Können Sie Daten zu Frage per Bearbeitungslink hinzufügen, weil schlechte Formatierung von Kommentaren? – jezrael
Haha, ich bin genauso nutzlos mit stackoverflow :) Ich mag deine Antwort sehr, aber ich würde meine Daten auf eine andere Weise bestellen müssen, richtig? –