pandas 将'gt'与两个多索引 Dataframe 一起使用

jq6vz3qz  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

我最近问了一个问题,Timeless用一段迷人的代码回答了我,它做了它应该做的事情。
基本上,我正在使用雅虎财经的一个多索引时间序列df,使用0级索引作为“调整收盘”和“高”。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"})


如果当前行的“高”与前一行的"高"相同,则返回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"})


目标是在当前行的“上限”大于前一行的“调整关闭”时获得True。
这就是我得到的:
| | ||检查||||
| --|--|--|--|--|--|--|
| | PETR4.SA | VALE3.SA | ITUB4.SA | PETR4.SA | VALE3.SA | VALE3.SA |
| 日期|||||||
| 2023年9月11日|假|假|假|假|假|假|
有2个问题:
1.为什么我得到了“调整关闭”列和“检查”列?
1.所有的值都是False。在实际df中,许多高的值都大于移位的收盘值。
我不明白为什么df.eq(df.shifted)工作正常,但不是df.gt(otherdf.shifted)
有没有人对此有所了解?
谢谢你,谢谢

nnt7mjpx

nnt7mjpx1#

为什么我得到了“调整关闭”列和“检查”列?
因为第一级列有不同的名称('High' vs 'Adj Close'),Pandas无法对齐它们的索引:

>>> 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

字符串

相关问题