2016-06-03 1 views
2
df=pd.DataFrame({'a':['x','x','y','y','y','z','y','y'],'b':np.random.randn(8)}) 

    a b 
0 x -0.2414 
1 x 1.2214 
2 y 0.3442  
3 y -2.9492 
4 y 0.1214 
5 z 2.8102 
6 y -1.3844 
7 y -0.7363 

Что является наиболее эффективным способом, чтобы выбрать значение в столбце b, что соответствует первому появления письма в колонке a, который отличается от предыдущего письма? Это то, что я пытаюсь достичьполучить значение в столбце, соответствующий первое вхождение элемента в другой колонке в панде - питон

a b 
0 x -0.2414 
2 y 0.3442 
5 z 2.8102 
6 y -1.3844 
+0

жизнерадостный, почему у Вас на выходе два раза? вам нужно только первое появление? – EoinS

+0

@EoinS: Это должно быть первое вхождение буквы, которая отличается от предыдущей буквы. Поэтому я хотел бы получить первый x. Тогда первый y, который приходит после всех предыдущих x. Тогда первый z после всех предыдущих y. Наконец, первый y после z. Это очень сложно вложить в слова ... – HappyPy

ответ

2
df[df['a'] != df['a'].shift(1)] 
Out[22]: 
    a   b 
0 x 0.564161 
2 y 1.498050 
5 z 0.080116 
6 y 0.255031 

Оригинал dataframe я использовал:

df 
Out[23]: 
    a   b 
0 x 0.564161 
1 x -1.153969 
2 y 1.498050 
3 y 0.067259 
4 y -0.345102 
5 z 0.080116 
6 y 0.255031 
7 y 0.345250 
+0

Он отлично работает, спасибо за вашу помощь! – HappyPy

+0

Добро пожаловать, рад, что это сработало. :) – ayhan

1

Вы хотите использовать groupby с a так, как я бы сделать это:

g = df.groupby('a') 
g.first() 

После того, как вы сгруппировали свои данные, first возвращает начальное появление a

Pandas groupby