我有一个熊猫系列,比如
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索引。