我有一个python pandas数据框,如下:
name date value
0 XYZ 01-01-2018 No Value
1 XYZ 02-01-2018 No Value
2 XYZ 03-01-2018 A
3 XYZ 04-01-2018 A
4 XYZ 05-01-2018 B
5 XYZ 06-01-2018 B
6 XYZ 07-01-2018 A
我只想获取value列中数据第一次出现A或B的行,并跳过连续的重复值。
例如,在这种情况下,A第一次出现在索引2,然后B出现在索引4,再次A出现在索引6。简而言之,我想获取索引为2,4和6的行。 / p>
任何帮助将不胜感激
答案 0 :(得分:3)
似乎您可能需要pd.Series.notnull
+ pd.Series.shift
:
res = df[df['value'].notnull() & (df['value'] != df['value'].shift())]
print(res)
name date value
2 XYZ 03-01-2018 A
4 XYZ 05-01-2018 B
6 XYZ 07-01-2018 A
答案 1 :(得分:2)
isin
和 shift
:
df.loc[(df.value.isin(['A', 'B'])) & (df.value != df.value.shift())]
name date value
2 XYZ 03-01-2018 A
4 XYZ 05-01-2018 B
6 XYZ 07-01-2018 A
答案 2 :(得分:1)
可能不是最佳解决方案,但这应该可行:
import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3, 4, 5], "b": [0, 2, 0, 1, 2]})
df.groupby("b").first()