我想询问一种优雅(节省时间(的方式来减少冗余的数字采样数据。 我得到了一个结构如下的.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())