2016-11-29 2 views
1

Я играл с фондовыми данными, и я пытаюсь фильтровать группы, которые имеют больше покупать, чем продавать с соответствующим до Transaction значенийПопытки запросить определенные группы, которые удовлетворяют условие value_count

Таким образом, код I бег, чтобы отобразить ниже данные является

df.groupby('Stock').Transaction.value_counts() 

данные

Stock Transaction  
ADC Buy     2 
AKAM Option Exercise 51 
     Sale    34 
     Buy     9 
AMNB Buy    10 
ARCC Buy    15 
ARL Buy    12 
ASA Buy     7 
ASRV Buy    12 
     Option Exercise  1 
AUBN Buy     4 
     Sale    11 
BAC Option Exercise 23 
     Buy    15 
     Sale    7 
BCBP Buy     3 
     Sale    11 
BKSC Buy    55 
BMRA Buy     5 
     Option Exercise  3 
     Sale    1 


         .. 

Я группируя данные по их тикерам, а затем, глядя на их соответствующих colu mn Transaction. Я пытаюсь отфильтровать группы, чьи транзакции value_counts имеют больше Buy, чем Sale.

Не могу понять, как это сделать.

Я пытался что-то вроде этого:

df.groupby('Stock').filter(lambda x: x.Transaction.value_counts().Buy > x.value_counts().Sale)

, который странно не работает, несмотря на это работа:

df.Transaction.value_counts().Buy 

>>>2674 

Я также попытался вещи вдоль линий

df.groupby('Stock').Transaction.filter(lambda x: x if x.value_counts().Buy > x.value_counts().Sale) 

Но я не могу придумать, какие инструменты pandas идеальны в этом случае.

Выход может быть что угодно от только имени запасов, которые удовлетворяют это условие для распечатки всей группы (акции имени и сделки)

Так что выход будет что-то вроде этого

ADC Buy     2 
AMNB Buy    10 
ARCC Buy    15 
ARL Buy    12 
ASA Buy     7 
ASRV Buy    12 
     Option Exercise  1 

BAC Option Exercise 23 
     Buy    15 
     Sale    7 
BKSC Buy    55 
BMRA Buy     5 
     Option Exercise  3 
     Sale    1 

Или просто названия акций.

Спасибо.

ответ

1

Я бы unstack тогда query

d1 = df.groupby('Stock').Transaction.value_counts() 
d1.unstack(fill_value=0).query('Buy > Sale') 

enter image description here

Мы можем получить его обратно все хорошо аккуратным с этим

d1.unstack(fill_value=0).query('Buy > Sale') \ 
    .replace(0, np.nan).stack().astype(int) 

Stock Transaction  
ADC Buy     2 
AMNB Buy    10 
ARCC Buy    15 
ARL Buy    12 
ASA Buy     7 
ASRV Buy    12 
     Option Exercise  1 
BAC Buy    15 
     Option Exercise 23 
     Sale    7 
BKSC Buy    55 
BMRA Buy     5 
     Option Exercise  3 
     Sale    1 
dtype: int64 
+0

Изумительный. Я знал, что нужно простое решение. Спасибо! – Moondra

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