【问题标题】:Creating a New DataFrame Column and Filling it with an If Statement - Python创建一个新的 DataFrame 列并用 If 语句填充它 - Python
【发布时间】:2020-04-16 13:19:03
【问题描述】:

期望的结果是有一个标题为“xOver”的新列,其中 xOver 中的值由 if 语句确定。

xOver 的值可以是:1、2 或 NaN。

如果:data['Close'] > data['sma_5'] 和 data['Close'][-1]

如果不满足该条件,则值为 NaN。

如果满足另一个 if 和语句条件,则值为 2(但为简单起见,为了解决此问题,我们可以忽略它)。

这是数据框,叫做:data。 enter image description here

这是我迄今为止尝试过的代码:

import pandas as pd 
import mplfinance as mpf
import numpy as np

data = pd.read_excel('SPY.xlsx', index_col=0, parse_dates=True)


#Create the moving avergae 
data['sma_5'] = data['Close'].rolling(33).mean()

print(data)

def xOver(data):

    if data['Close'] > data['sma_5'] and data['Close'][-1] < data['sma_5']:
        return 1
    else:
        np.nan

data['xOver'] = xOver

print(data)

返回这个: enter image description here

SPY.xlsx

enter image description here

【问题讨论】:

  • 我们需要一个minimal reproducible example 才能重现。这意味着:1/ 数据框 作为文本 以便我们可以复制/粘贴,2/ 足够的代码来重现问题和 3/ 观察到的和预期的结果。
  • 数据框不能像文本一样发布,因此我将它们的屏幕截图包括在内。
  • 不要尝试在 cmets 中添加代码或数据框数据,但请编辑问题。注释中的代码难以阅读和复制。
  • 我的意思是数据并不重要,可以是任何值。只需将数据帧作为标题包含在内并评估上述代码的输出。
  • 你如何添加文本 df's - 刚刚添加,它粘贴得很差/如何在线发布的指导很弱。因此,我提供的照片。

标签: python pandas dataframe if-statement moving-average


【解决方案1】:

我已经解决了这个问题,解决方法是:

data['xOver'] = np.where((data['Close'].shift(+2) < data['sma_5'].shift(+1)) 
                         & (data['Close'].shift(+1) > data['sma_5'].shift(+1))
                         & (data['Close'] > data['sma_5'].shift(+1)),
                         data['sma_5'],np.nan)

【讨论】:

    猜你喜欢
    • 2019-06-20
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-01-23
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多