所以我在看起来像这样的列中有一组值:
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]
这很好用,但不能保存该连续数字的最后一个数字
答案 0 :(得分:4)
将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
答案 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