选择熊猫系列中的第一个不同值



我有一个熊猫系列,比如

0  A
1  A       
2  B       
3  B       
4  A
5  B
6  B
7  B
8  A   

我每次都需要选择第一个不同的值,所以结果应该看起来像

0  A   
2  B       
4  A
5  B
8  A

我可以用一个简单的循环和一个跟踪变量来实现这一点,但我需要将其应用于大量的数据帧/系列。有矢量化/更好的方法吗?

让我们尝试一个布尔索引:

import pandas as pd
df = pd.DataFrame({'val': {0: 'A', 1: 'A', 2: 'B', 
3: 'B', 4: 'A', 5: 'B', 
6: 'B', 7: 'B', 8: 'A'}})
print(df[df['val'].ne(df['val'].shift())])

输出:

val
0   A
2   B
4   A
5   B
8   A

布尔索引查找当前值与上一个值不匹配的位置:

print(df['val'].ne(df['val'].shift()))

生成:

0     True
1    False
2     True
3    False
4     True
5     True
6    False
7    False
8     True
Name: val, dtype: bool

保留True索引,排除False索引。

最新更新