熊猫:删除连续的重复项,但保留第一个和最后一个值

时间:2018-07-10 15:45:20

标签: python pandas

所以我在看起来像这样的列中有一组值:

1 0 2 1 1 0 0 0 0 0 1 2 0 0 0 0 4 

我正在尝试删除重复的零,但保留第一个和最后一个。 最终结果应如下所示:

1 0 2 1 1 0 0 1 2 0 0 4

删除重复项将不起作用,因为它会删除所有零,而不是独立的连续零。

df = df.loc[df.people.shift() != df.people]

这很好用,但不能保存该连续数字的最后一个数字

enter image description here

2 个答案:

答案 0 :(得分:4)

fillnalimit一起使用

s[s.replace(0,np.nan).ffill(limit=1).bfill(limit=1).notnull()]
Out[387]: 
0     1
1     0
2     2
3     1
4     1
5     0
9     0
10    1
11    2
12    0
15    0
16    4
dtype: int64

答案 1 :(得分:2)

设置

s = pd.Series([1, 0, 2, 1, 1, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 4])

您可以使用基于 shift 的布尔索引来检查元素是否为零,并检查它是否在一组零的中间,而不是第一个或最后一个零。

s[~((s==0) & (s == s.shift(1)) & (s == s.shift(-1)))]

输出:

0     1
1     0
2     2
3     1
4     1
5     0
9     0
10    1
11    2
12    0
15    0
16    4
dtype: int64