Как сравнить два кадра данных одинакового размера и создать новый без строк, имеющих одинаковое значение в столбце - PullRequest
0 голосов
/ 10 июля 2019

Я создаю устройство сбора данных, которое извлекает данные датчика (из API) каждые 5 минут и сохраняет их в файлах CSV (экспортируемых каждые 24 часа в базу данных), и я хотел бы уменьшить размер этих файлов, сохранив толькоданные при изменении значения.

Моя идея - сохранить все данные в CSV-файле «память» (который будет удален в конце дня) и сравнить последние X строк (df1 -> T1) с новым фреймом данных (df2 -> T2) и создать фрейм данных (df3 -> T2) без строк, в которых значения остаются прежними.Этот df3 будет записан в другом CSV, который будет экспортирован в базу данных в конце дня.

Это правильный путь для продолжения?

Как сравнить два кадра данных одного и того жеразмер и создать 3-й кадр данных без строк, где значение не изменяется?

df1 
   Time   Name  Value
0   t1  Name1      3
1   t1  Name2      1
2   t1  Name3      5
3   t1  Name4      9 

df2 
   Time   Name  Value
0   t2  Name1      3
1   t2  Name2      7
2   t2  Name3      5
3   t2  Name4      2 

df3 
   Time   Name  Value
0   t2  Name2      7
1   t2  Name4      2

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Использовать DataFrame.merge только с индикатором и фильтром right_only строки:

df = (df1.merge(df2, on=['Name','Value'], indicator=True, how='outer', suffixes=('_',''))
        .query('_merge == "right_only"')[df2.columns])

print (df)
  Time   Name  Value
4   t2  Name2      7
5   t2  Name4      2
1 голос
/ 10 июля 2019

Использование:

df3 = df2[df2['value'] != df1['value']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...