Pandas: 删除连续重复值但保留第一个和最后一个值

4

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

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个回答

6
使用 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

有没有一种方法可以处理所有类型的值,而不仅仅是零? - bobo T
@boboT 只需将值替换为 np.nan,即可获得结果。 - BENY

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接