提问人:AndysPythonStuff 提问时间:10/30/2023 更新时间:10/30/2023 访问量:28
将“gt”与两个 multindex datframe 一起使用
Using 'gt' with two multindex datframes
问:
我最近问了一个问题,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"})
目标是如果当前行的 High 大于前一行的 'Adj Close',则获得 True。
这是我得到的:
调整关闭 | 检查 | |||||
---|---|---|---|---|---|---|
ITUB4.SA | PETR4.SA | VALE3.SA | ITUB4.SA | PETR4.SA | VALE3.SA | |
日期 | ||||||
11-09-2023 | 假 | 假 | 假 | 假 | 假 | 假 |
有 2 个问题:
为什么我会同时获得 Adj Close 列和 Check 列?
所有值均为 False。在实际 df 中,许多高值大于移位收盘价值。
我不明白为什么工作正常但不能.df.eq(df.shifted)
df.gt(otherdf.shifted)
有人对此有所了解吗?
谢谢!
答:
2赞
Corralien
10/30/2023
#1
为什么我会同时获得 Adj Close 列和 Check 列?
因为第一级列具有不同的名称(“High”与“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
评论
0赞
AndysPythonStuff
10/30/2023
啊......意义!谢谢!我认为我误解了重命名发生的方式/时间。
评论