2016-11-29 99 views
1

我玩弄股票数据的某些群体,我试图来筛选有更多的购买群体比各自对Transaction试图查询该满足VALUE_COUNT条件

所以我的代码出售“M运行,以显示下面的数据是

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) 
线

但我无法想象在这种情况下哪种熊猫工具是理想的。

输出可以从满足该条件,打印出整个集团(股票名称和交易)的股票只是名称,也

所以输出会是这样的

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