将“gt”与两个多索引数据框一起使用

问题描述 投票:0回答:1

我最近问了一个问题,Timeless 回复了一段令人着迷的代码,完成了它应该做的事情。

基本上,我正在使用来自雅虎财经的多索引时间序列 df,使用 0 级索引作为“Adj Close”和“High”。 1 级索引是公司代码列表。

我尝试改编原始代码,但我陷入了真正的混乱。这是我的改编:

def indicators_df(df):
    def xs(df, m):
        return df.xs(m, axis=1, drop_level=False)

    def rn(df, d):
        return df.rename(d, axis=1, level=0)

    tmp1 = df.pipe(xs, "Adj Close")    
    tmp2 = df.pipe(xs, "High")
    
    chk = tmp2.gt(tmp.shift()).pipe(rn, {"High": "Check"})

    return chk

原来的代码是:

chk = tmp2.eq(tmp2.shift()).pipe(rn, {"High": "Check"})

如果当前行的“High”与上一行的“High”相同,则返回 True

我的改编做了以下改变:

1) I add in:

    tmp1 = df.pipe(xs, "Adj Close")

2) I change chk to:

    chk = tmp2.gt(tmp1.shift()).pipe(rn, {"High": "Check"})

目标是如果当前行的最高价大于前一行的“Adj Close”,则获得 True。

这就是我得到的:

调整关闭 检查
ITUB4.SA PETR4.SA VALE3.SA ITUB4.SA PETR4.SA VALE3.SA
日期
11-09-2023 错误 错误 错误 错误 错误 错误

有2个问题:

  1. 为什么我会看到 Adj Close 列以及 Check 列?

  2. 所有值均为 False。在实际的 df 中,很多最高值都大于平移收盘值。

我不明白为什么

df.eq(df.shifted)
工作正常,但
df.gt(otherdf.shifted)
不行。

有人能解释一下吗?

谢谢!

pandas dataframe comparison multi-index
1个回答
0
投票

为什么我会看到 Adj Close 列以及 Check 列?

因为第一级列有不同的名称(“High”与“Adj Close”:

>>> tmp2.gt(tmp1.pipe(rn, {"Adj Close": "High"})).pipe(rn, {"High": "Check"})

           Check            
              C1    C2    C3
Date                        
02-01-2020  True  True  True
03-01-2020  True  True  True
© www.soinside.com 2019 - 2024. All rights reserved.