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

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 文件的方法,并使用相应的 mask 和 compress 函数。但我实现的方法非常耗时。
3个回答

4

以下是一种方法,与一个偏移版本进行比较:

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

4
如果第一列是索引,请使用以下内容:
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())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接