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

问题描述 投票:3回答:3

我想提出一种优雅(省时)的方法来减少冗余的数字采样数据的想法。我得到了.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文件并使用相应的maskcompress函数的方法。但是我的实现方式非常耗时。

python pandas csv
3个回答
3
投票

这是与转换版本比较的一种方法:

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

3
投票

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

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

0
投票

尝试使用groupby

print(df.groupby(['data1', 'data2', 'data3'], as_index=False).first())
© www.soinside.com 2019 - 2024. All rights reserved.