根据pandas中重复的连续值删除变量

时间:2017-06-08 10:13:10

标签: python dataframe duplicates

假设我在python中有一个带有索引,变量和值列的数据帧。我想删除变量与前一个瞬时值相同的行。换句话说,我想获得另一个数据框,其中包含值正在变化的变量。例如,
原始数据框:

Index  var  val
0      x1   10
1      x2   11
2      x1   10
3      x3   12
4      x1   13
5      x3   14
6      x2   12
7      x1   14

输出表:

Index  var  val
0      x1   10
1      x2   11
2      x3   12
3      x1   13
4      x3   14
5      x2   12
6      x1   14

最有效的方法是什么?想象一下,如果我有很多变量(1000) 欢呼声。

2 个答案:

答案 0 :(得分:1)

pandas.transform救援。

可以找到对变换的一个很好的解释here

duplicates = df.groupby('var')['val'].transform(lambda x: x.diff()==0)
df[~duplicates].reset_index(drop=True)
  

重复

Index
0    False
1    False
2     True
3    False
4    False
5    False
6    False
7    False
  

结果

    var     val
0   x1  10
1   x2  11
2   x3  12
3   x1  13
4   x3  14
5   x2  12
6   x1  14

答案 1 :(得分:0)

我找到了一步一步的方法,在排序后创建了一些True False'helper'列,然后最终重新索引它并返回所需的列。

df = df.sort_values(['var', 'val'])
df['original_index'] = df.index
df = df.reset_index()
df['varHasChanged'] = df['var'] != df['var'].shift(+1)
df['valhasChanged'] = df['val'] != df['val'].shift(+1)
df = df[~((df.varHasChanged == False) & (df.valhasChanged == False))]
df = df.sort_values(['Index'])
df = df.set_index(['Index'])
df = df[['var', 'val']]
df