如何删除熊猫 DF 列中的连续相似数字

Mar*_*Vos 3 loops python-3.x pandas

我有一个带有列的 Pandas DF - 该列可以有 3 个值,0、1 或 ' '(参见下面的示例)。我想要做的是删除所有相似的连续数字。所以一个 0 永远不能跟一个 0,一个 1 永远不能跟一个 1。相反,我想用 ' ' 替换它们。

当前的熊猫DF

时间 价值
1:00 0
2:00
3:00 0
4:00 1
5:00
6:00
7:00 1
8:00 1
9:00 0

我想要的是

时间 价值
1:00 0
2:00
3:00
4:00 1
5:00
6:00
7:00
8:00
9:00 0

我尝试使用循环,但找不到一种干净的方法来引用“下一个相同的值”。任何简单的解决方案?

Mus*_*dın 6

一个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())
                      )
           )
Run Code Online (Sandbox Code Playgroud)
  • replace使用空字符串 np.nan
  • forwardfill荷兰国际集团的NaNs到获得的0和1分的流
  • grouping by0和1
  • 放回 key(0 或 1)和一些空字符串(组的长度 - 1)
  • 将这些块压平 chain.from_iterable
  • 强制转换为 alist以将其分配回数据框

要得到

   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
Run Code Online (Sandbox Code Playgroud)