在SQL表中选择列<0时的最小值,以及列>0时的最大值

2024-10-02 12:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个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

所以基本上,一张我渴望/做空的股票表

我想找出这张表中表现最好的前4名,所以空头(股票<;0)谁的回报最低,谁的多头(股票>;0)谁的回报最高。 基本上,返回这个:

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

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

或者,如果更简单的话,如果有任何pandas函数可以做同样的事情,如果我把这个表转换成pandas数据帧


Tags: pandassqlreturnatdareacap股票
2条回答

像这样:

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

熊猫解决方案:

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

相关问题 更多 >

    热门问题