我正在尝试解决如何在 Pandas 系列中显示 True
或 False
的条纹。
数据:
p = pd.Series([True,False,True,True,True,True,False,False,True])
0 True
1 False
2 True
3 True
4 True
5 True
6 False
7 False
8 True
dtype: bool
我试过
p.diff()
但不知道如何计算这产生的 False
值以显示我的 所需的输出 如下:。0 0
1 0
2 0
3 1
4 2
5 3
6 0
7 1
8 0
最佳答案
如果 cumcount
与 p
ed shift
和 p
不相等,您可以使用通过比较创建的连续组的 cumsum
:
print (p.ne(p.shift()))
0 True
1 True
2 True
3 False
4 False
5 False
6 True
7 False
8 True
dtype: bool
print (p.ne(p.shift()).cumsum())
0 1
1 2
2 3
3 3
4 3
5 3
6 4
7 4
8 5
dtype: int32
print (p.groupby(p.ne(p.shift()).cumsum()).cumcount())
0 0
1 0
2 0
3 1
4 2
5 3
6 0
7 1
8 0
dtype: int64
感谢 MaxU 提供另一种解决方案:
print (p.groupby(p.diff().cumsum()).cumcount())
0 0
1 0
2 0
3 1
4 2
5 3
6 0
7 1
8 0
dtype: int64
关于python - Pandas 系列中的真假条纹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41893702/