Pandas, удалить различия между 3 кадрами данных на основе общих данных столбца - PullRequest
1 голос
/ 02 мая 2020

У меня есть 3 кадра данных, содержащих данные датчика. Я делаю некоторую очистку данных, прежде чем работать с ним дальше. Мне в основном нужно хранить данные общего времени между 3 наборами данных и отбрасывать строки из каждого кадра данных, которых нет в других. Я относительно новичок в pandas, и прежде чем использовать что-то вроде SQL, мне было интересно, есть ли способ достичь этого с помощью pandas?

Чтобы дать лучшее представление о том, что я имею в виду здесь, снимок экрана csv-файлов в Excel, который я использую на фреймах данных:

dataframe_csv

Как на скриншоте выше, из-за способа сбора данных Я не могу синхронизировать время точно, так как пока DF1 имеет метку времени 01.05.2020 19:33:54, метка времени, DF2 и DF3 нет, но все кадры данных будут иметь метку времени начала DF3, поэтому я хотел бы удалить необычные значения данных столбца времени из все 3 кадра данных. Я также должен сделать то же самое с данными в конце каждого файла.

Возможно ли это?

Просто чтобы уточнить ввод и вывод, которые мне нужны, будет похоже на следующее:

DF1
Time        DeviceID SensorData
19:44:01    IMU1    0.26
19:44:02    IMU1    0.25
19:44:03    IMU1    0.25
19:44:04    IMU1    0.25


DF2
19:44:02    IMU2    0.27
19:44:03    IMU2    0.23
19:44:04    IMU2    0.22
19:44:05    IMU2    0.28

DF3
19:44:03    IMU3    0.23
19:44:04    IMU3    0.15
19:44:05    IMU3    0.07
19:44:06    IMU3    0.45

Output:
DF1
19:44:03    IMU1    0.25
19:44:04    IMU1    0.25

DF2
19:44:03    IMU2    0.23
19:44:04    IMU2    0.22

DF3
19:44:03    IMU3    0.23
19:44:04    IMU3    0.15

Но это необходимо сделать для каждый кадр данных, так как мне нужно сначала использовать их отдельно.

1 Ответ

1 голос
/ 02 мая 2020

Учитывая, что все ваши кадры данных (df1, df2, df3) имеют одинаковые имена столбцов, вы можете сделать это:

In [1130]: s = df1.merge(df2,on='Time').merge(df3,on='Time')['Time']

In [1134]: df1 = df1[df1.Time.isin(s)]                                                                                                                                                                      

In [1135]: df2 = df2[df2.Time.isin(s)]                                                                                                                                                                      

In [1136]: df3 = df3[df3.Time.isin(s)]                                                                                                                                                                      

In [1137]: df1                                                                                                                                                                                              
Out[1137]: 
       Time DeviceID  SensorData
2  19:44:03     IMU1        0.25
3  19:44:04     IMU1        0.25

In [1138]: df2                                                                                                                                                                                              
Out[1138]: 
       Time DeviceID  SensorData
1  19:44:03     IMU2        0.23
2  19:44:04     IMU2        0.22

In [1139]: df3                                                                                                                                                                                              
Out[1139]: 
       Time DeviceID  SensorData
0  19:44:03     IMU3        0.23
1  19:44:04     IMU3        0.15
...