当列<时,在SQL表中选择最小值当列>时0和最大值0

时间:2017-04-23 19:46:27

标签: python sql sql-server pandas

我有一个这样的SQL表:

Ticker    Return       Shares
AGJ        2.20         1265
ATA        1.78        698
ARS        9.78        10939
ARE       -7.51       -26389
AIM        0.91        1758
ABT        10.02       -5893
AC        -5.73       -2548
ATD        6.51        7850
AP         1.98        256
ALA       -9.58        8524

基本上,我渴望/做空的股票表。

我希望在此表中找到前四名中最佳表现者,因此具有最低回报的空头(股票< 0)和具有最高回报的多头(股票> 0)。 基本上,返回这个:

Ticker    Return       Shares
ARS        9.78        10939
ARE       -7.51       -26389
AC        -5.73       -2548
ATD        6.51        7850

我怎样才能编写允许我这样做的查询?

或者,如果它更容易,如果有任何pandas函数,如果我将此表转换为pandas数据帧,将执行相同的操作。

2 个答案:

答案 0 :(得分:0)

这样的事情:

select top (4) t.*
from t
order by (case when shares < 0 then - [return] else [return] end) desc;

答案 1 :(得分:0)

熊猫解决方案:

In [134]: df.loc[(np.sign(df.Shares)*df.Return).nlargest(4).index]
Out[134]:
  Ticker  Return  Shares
2    ARS    9.78   10939
3    ARE   -7.51  -26389
7    ATD    6.51    7850
6     AC   -5.73   -2548

说明:

In [137]: (np.sign(df.Shares)*df.Return)
Out[137]:
0     2.20
1     1.78
2     9.78
3     7.51
4     0.91
5   -10.02
6     5.73
7     6.51
8     1.98
9    -9.58
dtype: float64

In [138]: (np.sign(df.Shares)*df.Return).nlargest(4)
Out[138]:
2    9.78
3    7.51
7    6.51
6    5.73
dtype: float64