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 |
我尝试使用循环,但找不到一种干净的方法来引用“下一个相同的值”。任何简单的解决方案?
一个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.nanforwardfill荷兰国际集团的NaNs到获得的0和1分的流grouping by0和1key(0 或 1)和一些空字符串(组的长度 - 1)chain.from_iterablelist以将其分配回数据框要得到
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)