У меня есть набор данных .csv с данными RFID, по которым взаимодействовали вторые люди:
tag_me - это переменная человека 1, tag_them - это имя человека, которого вы встретили в эту секунду, time_local_s - это время, когда произошло взаимодействие. Rfid начал запись в 19:00:00, поэтому первое взаимодействие было записано в 19:22:36 (19:00:00 + 1356 секунд).
tag_me,tag_them,time_local_s
0x597E5627,0x3C992634,1356
0x597E5627,0x3C992634,1360
0x597E5627,0x3C992634,1361
0x597E5627,0x3C992634,1362
0x597E5627,0x3C992634,1363
0x597E5627,0x7DA8FFB0,1364
0x597E5627,0x3C992634,1365
0x597E5627,0x3C992634,1365
0x597E5627,0x3C992634,1366
0x597E5627,0x7DA8FFB0,1366
0x597E5627,0x36570942,1366
0x597E5627,0x3C3A21AD,1369
0x597E5627,0x06497CA4,1370
0x597E5627,0x06497CA4,1372
0x597E5627,0x06497CA4,1372
0x597E5627,0x06497CA4,1374
0x597E5627,0x06497CA4,1374
0x597E5627,0x064F5882,1379
Я бы хотел сгруппировать каждое взаимодействие в одну строку, записывая время, когда взаимодействие начиналось, заканчивалось и сколько времени это заняло. поэтому я могу фильтровать по определенному порогу (два RFID видят друг друга в течение 2 секунд, конечно же, это не взаимодействие.
tag_me,tag_them,time_start,time_end,total_time
0x597E5627,0x3C992634,1356,1363,7
0x597E5627,0x7DA8FFB0,1364,1363,1
0x597E5627,0x3C992634,1365,1366,1
0x597E5627,0x7DA8FFB0,1366,1366,1
0x597E5627,0x36570942,1366,1366,1
0x597E5627,0x3C3A21AD,1369,1369.1
0x597E5627,0x06497CA4,1370,1374,4
0x597E5627,0x064F5882,1379,1379,1
Я пробовал это до сих пор:
data = []
with open('timemerger.csv') as f:
for line in f:
data.append(line)
past_interactions = []
interactions = []
now = -1
new_data = []
for line in enumerate(data):
if line["time_local_s"] > now:
for tag_them, indices in past_interactions:
if tag_them not in data:
interactions.append(entry["tag_them"])
--------------- РЕДАКТИРОВАТЬ 7-5-2018 ----------
import pandas as pd
df = pd.read_csv('filter20seconden1.csv')
cols = df.columns.difference(['time_start', 'time_end'])
grps = df.time_start.sub(df.time_end.shift()).gt(20).cumsum()
gpby = df.groupby(grps)
new = gpby.agg(dict(time_start='min',
time_end='max')).join(gpby[cols].sum())