Pandas - 如何在不使用循环的情况下将不同的 类 分配给循环序列?
Pandas - How to assign different classes to a recurring series without using a loop?
我在 pandas 数据框中有一个包含重复值的系列。前 20 个值如下:
# input
[-1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1]
请注意,-1 表示新 class 的开始,而 1 表示前一个 class 的延续。
我可以将“-1”和“1”更改为编码的任何值。
我想要的输出是 class 标签,如下所示:
# output
[0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5]
目前我已经使用 for 循环完成了此操作。
我找不到使用内置 pandas / python 函数的更好方法。
如何在不使用 for 循环的情况下实现这一点?
比较 -1
的值并使用 Series.cumsum
的累积和,如果系列的第一个值是 0
减去 1
:
s = pd.Series([-1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1,
1, 1, 1, 1, -1, 1, 1, 1])
s1 = s.eq(-1).cumsum()
out = s1.sub(1) if s[0] == -1 else s1
如果总是第一个值是 -1
减去 1
:
out = s.eq(-1).cumsum().sub(1)
我在 pandas 数据框中有一个包含重复值的系列。前 20 个值如下:
# input
[-1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1]
请注意,-1 表示新 class 的开始,而 1 表示前一个 class 的延续。 我可以将“-1”和“1”更改为编码的任何值。 我想要的输出是 class 标签,如下所示:
# output
[0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5]
目前我已经使用 for 循环完成了此操作。 我找不到使用内置 pandas / python 函数的更好方法。
如何在不使用 for 循环的情况下实现这一点?
比较 -1
的值并使用 Series.cumsum
的累积和,如果系列的第一个值是 0
减去 1
:
s = pd.Series([-1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1,
1, 1, 1, 1, -1, 1, 1, 1])
s1 = s.eq(-1).cumsum()
out = s1.sub(1) if s[0] == -1 else s1
如果总是第一个值是 -1
减去 1
:
out = s.eq(-1).cumsum().sub(1)