Предполагая, что ваши данные отсортированы по времени, и вы загружаете в свой CSV, используя read_csv
, используя панд, вы можете сделать что-то простое, как это:
import pandas as pd
df = pd.DataFrame({'ID': [101, 101, 101, 101, 101, 102, 102, 102, 102, 102,], \
'Coordinates': [(90, -1), (90, -1), (90, -1), (90, -2), (90, -2), (90, -3), (90, -3), (90, -3), (90, -4), (90, -4)], \
'Timestamp': ['2016-01-01 9:00', '2016-01-01 9:01', '2016-01-01 9:02', '2016-01-01 9:03', '2016-01-01 9:04', \
'2016-01-01 9:00', '2016-01-01 9:01', '2016-01-01 9:02', '2016-01-01 9:03', '2016-01-01 9:04']})
clean_df = df.sort_values('Timestamp').drop_duplicates(subset=['ID', 'Coordinates'], keep='last')
print(clean_df)
ID Coordinates Timestamp
7 102 (90, -3) 2016-01-01 9:02
2 101 (90, -1) 2016-01-01 9:02
9 102 (90, -4) 2016-01-01 9:04
4 101 (90, -2) 2016-01-01 9:04
, если вы не возражаете против последнегоуникальное значение.
В качестве альтернативы,
df = pd.DataFrame({'ID': [101, 101, 101, 101, 101, 102, 102, 102, 102, 102,], \
'Coordinates': [(90, -1), (90, -1), (90, -1), (90, -2), (90, -2), (90, -3), (90, -3), (90, -3), (90, -4), (90, -4)], \
'Timestamp': ['2016-01-01 9:00', '2016-01-01 9:01', '2016-01-01 9:02', '2016-01-01 9:03', '2016-01-01 9:04', \
'2016-01-01 9:00', '2016-01-01 9:01', '2016-01-01 9:02', '2016-01-01 9:03', '2016-01-01 9:04']}).sort_values(by=['ID', 'Coordinates', 'Timestamp'], ascending=False)
new_df = df.loc[df['Coordinates'].shift() != df['Coordinates']]
print(new_df)
7 102 (90, -3) 2016-01-01 9:02
9 102 (90, -4) 2016-01-01 9:04
2 101 (90, -1) 2016-01-01 9:02
4 101 (90, -2) 2016-01-01 9:04