使用位码减少/过滤冗余样本数据的优雅方法



我想询问一种优雅(节省时间(的方式来减少冗余的数字采样数据。 我得到了一个结构如下的.csv文件:

time, data1, data2, data3
0.1, 1, 1, 0
0.2, 1, 1, 0
0.3, 1, 1, 0
0.4, 1, 0, 0
0.5, 1, 0, 0
0.6, 1, 0, 0
0.7, 0, 1, 0
0.8, 0, 1, 0

我想以减少传入数据的方式,以删除所有不必要的时间步长。 例如

time, data1, data2, data3
0.1, 1, 1, 0 
0.4, 1, 0, 0
0.7, 0, 1, 0

其余数据应仅包含位码更改时的时间步长。 我已经实现了一个使用pandas导入 csv 文件并使用相应的掩码压缩函数的方法。但是我实现它的方式非常耗时。

如果第一列是索引,请使用:

df = df[df.ne(df.shift()).any(axis=1)]
print (df)
data1  data2  data3
time                     
0.1       1      1      0
0.4       1      0      0
0.7       0      1      0

如果第一列不是索引:

df1 = df.iloc[:, 1:]
df = df[df1.ne(df1.shift()).any(axis=1)]
print (df)
time  data1  data2  data3
0   0.1      1      1      0
3   0.4      1      0      0
6   0.7      0      1      0

以下是与移位版本相比的一种方法:

df_ = df.loc[:, 'data1':]
df[~df_.eq(df_.shift()).all(1)]
time  data1  data2  data3
0   0.1      1      1      0
3   0.4      1      0      0
6   0.7      0      1      0

尝试使用groupby

print(df.groupby(['data1', 'data2', 'data3'], as_index=False).first())

最新更新