在 pandas 中仅删除连续重复项的最有效方法是什么?
drop_duplicates 给出:
In [3]: a = pandas.Series([1,2,2,3,2], index=[1,2,3,4,5])
In [4]: a.drop_duplicates()
Out[4]:
1 1
2 2
4 3
dtype: int64
但我想要这个:
In [4]: a.something()
Out[4]:
1 1
2 2
4 3
5 2
dtype: int64
Use shift https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.shift.html:
a.loc[a.shift(-1) != a]
Out[3]:
1 1
3 2
4 3
5 2
dtype: int64
因此上面使用布尔标准,我们将数据帧与移动 -1 行的数据帧进行比较以创建掩码
另一种方法是使用diff https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.diff.html:
In [82]:
a.loc[a.diff() != 0]
Out[82]:
1 1
2 2
4 3
5 2
dtype: int64
但如果您有大量行,这会比原始方法慢。
Update
感谢 Bjarke Ebert 指出了一个微妙的错误,我实际上应该使用shift(1)
要不就shift()
由于默认周期为 1,因此返回第一个连续值:
In [87]:
a.loc[a.shift() != a]
Out[87]:
1 1
2 2
4 3
5 2
dtype: int64
请注意索引值的差异,谢谢@BjarkeEbert!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)