2016-09-28 5 views
1

Я ищу, чтобы сделать это немного более питоническим.Есть ли еще питонический способ написать это?

user_df[-1:]['status_id'].values[0] in {3,5} 

Я ititially попытался user_id.ix[-1:, 'status_id'].isin([3,5]), но не работает.

Любые предложения? Верхняя версия работает, но выглядит немного странно.

ответ

4

Вы можете попробовать:

user_id['status_id'].iloc[-1:].isin([3,5]) 

Пример:

user_id = pd.DataFrame({'status_id':[1,2,3]}) 
print (user_id) 
    status_id 
0   1 
1   2 
2   3 

#iloc without : [-1] return scalar 
print (user_id['status_id'].iloc[-1] in set({3,5})) 
True 

#iloc with : [-1:] return vector - Series 
print (user_id['status_id'].iloc[-1:].isin([3,5])) 
2 True 
Name: status_id, dtype: bool 
+0

очень хороший ответ. особенно если он действительно хочет использовать pandas 'isin' для этого (как указано в его вопросе) –

+0

Да, отличный ответ. Я выбрал 'user_id ['status_id']. Iloc [-1] .isin ([3,5])' просто для поддержания согласованности. Спасибо! –

+0

@FranciscoCervera - Спасибо! – jezrael

2

isin может быть немного быстрее (чем больше значения, которые вы должны проверить больше скорости до вас заметит ... но даже для больших наборов его не будет огромной разницы ... (я сомневаюсь, что в этом примере он будет быстрее), но, вероятно, немного медленнее) ... но val in set()довольно dang pythonic (на самом деле гораздо больше, чем pd.isin)

тестируется одно значения против set ... с помощью pandas.isin или numpy.in1d вы Incure значительных накладных расходов времени, чтобы перейти в C и обратно питон против просто используя in и набор которым является O(1) посмотрите ... (в любом случае временной срез не существует на человеческом масштабе времени)

+0

а также функция pandas function 'NaN' очень хорошо – jezrael

+0

, но я не думаю, что это относится к этой проблемной области ... он тестирует ** одно значение ** против набора ... NaN не в том, что установлено –

+0

Я думаю как правило, функции pandas vs python. Но таким образом вы правы. – jezrael

Смежные вопросы