3

所以我在一列中有一组值,如下所示:

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]

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

在此处输入图像描述

4

2 回答 2

6

fillna_limit

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
于 2018-07-10T15:57:34.150 回答
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
于 2018-07-10T15:53:47.390 回答