具有索引条件的熊猫值分配

时间:2018-12-01 02:07:33

标签: python-3.x pandas

我正在尝试在Python中计算Demarker Indicator。下面介绍了如何计算它:

  1. 选择预定的时间段“ X”(标准值是“ 14”,尽管“ 8”或“ 9”的值往往更敏感);

  2. 计算DeMax =高–如果> 0,则为先前的高,否则为DeMax = 0;

  3. 计算DeMin =先前的低-如果> 0,则为低,否则DeMin = 0; DeM = DeMax的MA /(DeMax的MA + DeMin的MA)。

以下是我的尝试,df是一个包含以日期为索引的开盘高低收盘价的数据框:

df['DeMax'] = df['High'] - df['High'].shift(1)
df['DeMin'] = df['Low'].shift(1)-df['Low']
# Method 1: df['DeMax'][df['DeMax'] < 0] = 0.0 
# Method 2: df[df['DeMax']< 0]['DeMax'] = 0.0

如果我使用方法1,可以。但是,如果我使用Method2,则会收到警告SettingWithCopyWarning,即使我使用像这样的复制方法df['DeMax'] = df['High'].copy() - df['High'].copy().shift(1)也无法解决问题。

我还检查了df['DeMax'][df['DeMax'] < 0]df[test['DeMax']< 0]['DeMax']是相同的熊猫系列,那么如果我尝试分配值,为什么它们的行为有所不同?

另外,如果我做这样的事情

df['DeMax'] = df['High'] - df['High'].shift(1)
df['DeMin'] = df['Low'].shift(1)-df['Low']
a = df['DeMax'][df['DeMax'] < 0]
a = 0

然后a将为0,而不是熊猫系列,但我也希望df['DeMax'][df['DeMax'] < 0]将为0,这不会发生,有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您正在寻找.loc

df.loc[df['DeMax'] < 0,'DeMax']=0 # it will change all value less that 0 to 0