Pandas groupby和多条件过滤

q9yhzks0  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(219)
Date    Symbol   Open   High    Low  Close
0 2023-05-31  GEDIK.IS   7.90   8.01   7.77   7.87
1 2023-06-01  GEDIK.IS   7.92   8.20   7.89   8.14
2 2023-05-31  MIPAZ.IS   7.87   7.90   7.74   7.84
3 2023-06-01  MIPAZ.IS   7.84   8.06   7.80   8.05
4 2023-05-31  SUNTK.IS  36.20  37.52  35.48  37.00
5 2023-06-01  SUNTK.IS  37.20  38.30  36.60  38.30
6 2023-05-31  VANGD.IS   7.26   7.36   6.95   7.08
7 2023-06-01  VANGD.IS   7.09   7.63   6.92   7.48

我想从这个数据框中过滤股票,其中当天(06-01)有一个积极的蜡烛(关闭>打开),并创建一个与前一天的LL。在这个例子中,它应该只返回VANGD。我可以通过以下方式过滤LL

df.groupby(['Symbol']).apply(lambda x: x[x["Low"] > x["Low"].shift(-1)])

但是,这只返回匹配股票的第一行。我需要整个团队。

Date    Symbol  Open  High   Low  Close
Symbol
VANGD.IS 6 2023-05-31  VANGD.IS  7.26  7.36  6.95   7.08

比我能用积极的蜡烛过滤股票。在这个例子中也只有4只股票。请记住,原来的df有近500支股票要过滤。
非常感谢。

cuxqih21

cuxqih211#

看起来您想提取匹配的Symbol名称,然后.isin()查找所有对应的行。
如果符号都是相邻的,您可以通过比较移位的符号来替换.groupby().apply

LLs = df.loc[
   (df['Symbol'] == df['Symbol'].shift(-1)) & 
   (df['Low'] > df['Low'].shift(-1)), 
   'Symbol'
]

df[df['Symbol'].isin(LLs)]
Date    Symbol  Open  High   Low  Close
6 2023-05-31  VANGD.IS  7.26  7.36  6.95   7.08
7 2023-06-01  VANGD.IS  7.09  7.63  6.92   7.48

相关问题