Присвоение значения пандам с условиями на указатель - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь вычислить индикатор демарка в Python.Ниже описано, как его рассчитать:

  1. Выберите заранее определенный период «X» (стандартное значение «14», хотя значение «8» или «9» имеет тенденцию быть более чувствительным);

  2. Вычислить DeMax = High - Предыдущий максимум, если> 0, в противном случае DeMax = 0;

  3. Вычислить DeMin = Предыдущий минимум - Низкий, если> 0, в противном случае DeMin = 0;DeM = MA из DeMax / (MA из DeMax + MA из DeMin).

Моя попытка состоит в следующем, 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 голосов
/ 01 декабря 2018

Вы ищете .loc

df.loc[df['DeMax'] < 0,'DeMax']=0 # it will change all value less that 0 to 0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...