gpt4 book ai didi

python - 使用第 1 列和第 2 列填充第 3 列

转载 作者:太空狗 更新时间:2023-10-29 18:23:50 25 4
gpt4 key购买 nike

我是 Python 新手并且有以下 Pandas 数据框 - 我正在尝试编写填充“信号”列的代码,如下所示:

<表类="s-表"><头>天long_entry_flaglong_exit_flag信号<正文>1错误正确2错误错误3正确错误14正确错误15错误错误16正确错误17正确错误18错误正确9错误正确10正确错误111正确错误112正确错误113错误错误114错误正确15错误错误16错误正确17正确错误118正确错误119错误错误120错误错误121错误正确22错误错误23错误错误

我的伪代码版本将采取以下步骤

  1. 查看 [‘long_entry_flag’] 列,直到进入条件为真(最初是第 3 天)
  2. 然后我们每天在 [‘signal’] 列中输入‘1’,直到第 8 天退出条件为 True [‘long_exit_flag’]==True
  3. 然后我们回头查看 [‘long_entry_flag’] 列以等待下一个进入条件(发生在第 10 天)
  4. 我们每天再次在 [‘signal’] 列中输入“1”,直到退出条件为真(第 14 天)
  5. 等等

如果可能(使用矢量化?),有哪些方法可以快速填充“信号”列?

这是具有数万行的大型数据帧的子集,并且是按顺序分析的众多数据帧之一。

最佳答案

你可以做到

# Assuming we're starting from the "outside"
inside = False
for ix, row in df.iterrows():
inside = (not row['long_exit_flag']
if inside
else row['long_entry_flag']
and not row['long_exit_flag']) # [True, True] case
df.at[ix, 'signal'] = 1 if inside else np.nan

这将为您提供您发布的准确输出。


受到 @jezrael's answer 的启发,我创建了一个上面的性能略高的版本,同时仍然尽可能保持它的整洁:

# Same assumption of starting from the "outside"
df.at[0, 'signal'] = df.at[0, 'long_entry_flag']
for ix in df.index[1:]:
df.at[ix, 'signal'] = (not df.at[ix, 'long_exit_flag']
if df.at[ix - 1, 'signal']
else df.at[ix, 'long_entry_flag']
and not df.at[ix, 'long_exit_flag']) # [True, True] case

# Adjust to match the requested output exactly
df['signal'] = df['signal'].replace([True, False], [1, np.nan])

关于python - 使用第 1 列和第 2 列填充第 3 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53721733/

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