gpt4 book ai didi

python - 根据 df1 上的条件以及 df2 或 df3 的报告值创建 pd 系列

转载 作者:行者123 更新时间:2023-12-01 06:26:34 25 4
gpt4 key购买 nike

这里是第一篇文章。我是 Python 新手,但利用此处发布的其他问题的答案已经取得了很多进展。不幸的是,我在看似简单的任务上遇到了麻烦。我有 3 个 pandas 系列,按日期索引

df1 = {'signal': [0,0,1,1,0,0,1]}  #binary trading signal

df2 = {'SPX': [5,0,5,1,0,5,2]} #S&P 500 returns

df3 = {'UST': [-1,1,1,0,1,-1,0]} #10yr Treasury returns

我正在尝试创建一个新系列 df4 来代表交易信号的返回概况。如果信号 = 1,则获取当天的 df3 值,否则给我 df2 值(适用于所有零)

我发现了很多关于这个主题的帖子,这些帖子看起来很简单,但很难让它们发挥作用。我尝试了一个简单的 if 语句...

df4 = df1
if df1 == 1:
df4.replace(1, df3)
else:
df4.replace(0, df2)

但是我得到 ValueError: The true value of a Series is ambigacy.使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。如果我添加 df1.any(),则不会发生任何更改

我也尝试过使用其他解决方案但失败了......

df4 = df1.apply(lambda x: df2 if x == 0 else df3, axis=1)

df4 = df1.loc[df1 == 1, df3] == df2

df4 = df1.select([df1 > 0], [df3], default=df2)

我担心的一件事是,如果我将 df4 中的所有 1 替换为 df3 的返回值,并且在某些时候恰好该值是 0...那么如果我对所有内容进行第二次替换df4 中的 0,我可能会放置一个应该保留的 0。

非常感谢任何帮助我了解最有效方法的帮助。

最佳答案

使用Series.where(),指定列名称。

参见https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.where.html

>>> df3.where(df1.signal == 1, other=df2.SPX, axis=0)
UST
0 5
1 0
2 1
3 0
4 0
5 5
6 0

关于python - 根据 df1 上的条件以及 df2 或 df3 的报告值创建 pd 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60116795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com