【问题标题】:return value based on result of sum of rows in separate column根据单独列中行总和的结果返回值
【发布时间】:2019-11-17 05:48:18
【问题描述】:

我正在尝试创建一个新列(D 列),如果在接下来的 5 行(上方)中的任何时候,SELL(即 452.37)时值的更改返回一个 CLOSE 值达到5% 较低的值。 (即452.37 / 1.05 = 432.85)确实出现在第5行。

我的数据框如下,D行是我想要的样子

df = pd.DataFrame()

df['A'] = ('1/05/2019','2/05/2019','3/05/2019','4/05/2019','5/05/2019',
           '6/05/2019','7/05/2019','8/05/2019','9/05/2019','10/05/2019')
df['B'] = (460.97, 454.50, 439.00, 438.04, 433.00,
           428.01, 440.00, 437.69, 452.37, 455.93)
df['C'] = ('-', '-', '-', '-', '-', '-', '-', '-', 'SELL', '-')
df['D'] = ('-', '-', '-', '-', '-', 'CLOSE', '-', '-', '-', '-')

print(df)

【问题讨论】:

  • 为什么要撤消我的编辑?您的帖子无法阅读。
  • 同意。当帖子缺少任何格式时,我认为没有人可以帮助您:\
  • 抱歉,我需要更多解释。我不做期权交易,但你们通常最后不收盘吗? optionstradingresearch.com/… 假设你在做空,如果期权价值下降,你卖出开仓,然后买入平仓?

标签: python pandas numpy


【解决方案1】:

根据给出的描述,您似乎可以结合移位 B,计算滚动最大值,并将此滚动最大值与 B 的“当前”值进行比较:

df['D2'] = np.where((pd.Series(np.where(df['C'] == 'SELL', 
                    df['B'],
                    0)).shift(-5).rolling(5, min_periods=1).max() / df['B']) > 1.05,
                    'CLOSE',
                    '-')
print(df)

返回

            A       B     C      D     D2
0   1/05/2019  460.97     -      -      -
1   2/05/2019  454.50     -      -      -
2   3/05/2019  439.00     -      -      -
3   4/05/2019  438.04     -      -      -
4   5/05/2019  433.00     -      -      -
5   6/05/2019  428.01     -  CLOSE  CLOSE
6   7/05/2019  440.00     -      -      -
7   8/05/2019  437.69     -      -      -
8   9/05/2019  452.37  SELL      -      -
9  10/05/2019  455.93     -      -      -

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多