仅保留DataFrame中连续重复行的第一行

时间:2015-08-04 09:16:33

标签: python pandas dataframe time-series

假设我有一个包含一列数据的DataFrame。例如:

2001-01-20   21
2001-01-21   21
2001-01-22   21
2001-01-23   23
2001-01-24   24
2001-01-25   24

我不想使用完整的DataFrame,而只想返回与前一行不同的行。

因此,这个

2001-01-20   21
2001-01-23   23
2001-01-24   24

会导致此

dff = df.diff() # Compute another Series with the differences
dff.ix[0, ] = df.ix[0, ] # Instead of NAN for the row use first row of df
df['diff'] = dff # Add as column in df
df = df[df['diff'] >= 1] # Filter out 
df = df.ix[:, 0:-1] # Drop additional column

现在我会这样做

{{1}}

这看起来非常复杂。我觉得我错过了什么。任何想法如何使它更pythonic和熊猫式?

1 个答案:

答案 0 :(得分:4)

您可以使用.shift()比较前一行和当前行,然后使用相应的布尔系列索引DataFrame:

df.loc[df['a'] != df['a'].shift()]

(我假设您的专栏名为'a')。

.shift()只是将列/系列中的值向上或向下移动指定的位数(默认值为1)。