Python 3.x 如何删除列中连续的相似数字
我有一个带列的DF-此列可以有3个值,0、1或“”(参见下面的示例)。 我要做的是删除所有类似的连续数字。所以0永远不能跟在0后面,1永远不能跟在1后面。相反,我想用“”替换这些 当前数据集 时间 价值 1:00 0 2:00 3:00 0 4:00 1. 5:00 6:00 7:00 1. 8:00 1. 9:00 0Python 3.x 如何删除列中连续的相似数字,python-3.x,pandas,loops,Python 3.x,Pandas,Loops,我有一个带列的DF-此列可以有3个值,0、1或“”(参见下面的示例)。 我要做的是删除所有类似的连续数字。所以0永远不能跟在0后面,1永远不能跟在1后面。相反,我想用“”替换这些 当前数据集 时间 价值 1:00 0 2:00 3:00 0 4:00 1. 5:00 6:00 7:00 1. 8:00 1. 9:00 0 itertools解决方案: from itertools import chain, groupby df.value = list(chain.from_iterable
itertools
解决方案:
from itertools import chain, groupby
df.value = list(chain.from_iterable(
[key, *['']*(len(list(gr))-1)]
for key, gr in groupby(df.value.replace("", np.nan).ffill())
)
)
ing空字符串为replace
np.nan
orwardf
ingfill
s以获得0和1的流NaN
ing分组
0和1by
- 将
(0或1)与一些空字符串(组的长度为-1)放回原处键
- 使用
chain.from\u iterable
- 强制转换到
以将其分配回数据帧列表
time value
0 1:00 0
1 2:00
2 3:00
3 4:00 1
4 5:00
5 6:00
6 7:00
7 8:00
8 9:00 0
我们可以在
value
上使用loc
删除具有空字符串的行,然后shift
并比较过滤后的行以创建布尔掩码,然后mask
布尔掩码保持为真的空字符串值
s = df['value'].loc[lambda x: x != '']
m = s.eq(s.shift())
df.loc[m[m].index, 'value'] = ''
在输出3:00时也应该有0,因为它是在空字符串之后,这太棒了!工作起来很有魅力!这是
itertools.groupby
time value
0 1:00 0
1 2:00
2 3:00
3 4:00 1
4 5:00
5 6:00
6 7:00
7 8:00
8 9:00 0