我有一个这样的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数据帧,将执行相同的操作。
答案 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