所以我在一列中有一组值,如下所示:
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]
这很好用,但不保存该连续数字的最后一个数字
与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
设置
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