我正在尝试解决如何在 Pandas 系列中显示 TrueFalse 的条纹​​。

数据:

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/

10-12 23:14