создать вычисляемый столбец в кадре данных, используя условие - PullRequest
0 голосов
/ 07 мая 2019

Мой Dataframe в Python имеет следующие числовые данные
mydf =

mydate     mytime                  myopen                 High                   Low                    myclose
---------- ----------------------- ---------------------- ---------------------- ---------------------- -----------
2019-04-15 1900-01-01 15:25:00.000 1675.75                1679.75                1673.35                1673.35
2019-04-15 1900-01-01 15:25:00.000 142.75                 142.8                  142.25                 142.45
2019-04-15 1900-01-01 15:25:00.000 387                    387.5                  385.7                  387.05
2019-04-15 1900-01-01 15:25:00.000 54.7                   54.7                   54.45                  54.45
2019-04-15 1900-01-01 15:25:00.000 1026.1                 1028                   1026.1                 1027.15
2019-04-15 1900-01-01 15:25:00.000 53.65                  53.75                  53.5                   53.7

Мне нужно создать вычисляемый столбец с именем newcol, вычисление которого будет основано на условии.Условие того, какие из столбцов имеют более высокие значения - миопен / микрозоза.для более высоких значений я считаю, что функция np.fmax подходит для моего случая.
Итак, Для каждой записи в приведенном выше df ...

If myopen >= myclose:
mydf['newcol']= myopen X 6 + 4 * High + (High - myclose)
else:
mydf['newcol']= myclose X 3 + 4 * myclose + (myclose - myopen)

Я уверен, что вышесказанного можно достичь, пройдя через mydf. Однако я также считаю, что для достижения этой цели должен быть более эффективный метод.

Буду признателен за помощь в вышесказанном, поскольку я все еще новичок.

Спасибо за объявление.

Ответы [ 2 ]

3 голосов
/ 07 мая 2019

Помимо numpy.where вы можете использовать функцию loc с условием для достижения этого, как показано ниже:

df.loc[df.myopen >= df.myclose, 'new_col'] = df.myopen X 6 + 4 * df.High + (df.High - df.myclose)
df.loc[df.myopen < df.myclose, 'new_col'] = df.myclose X 3 + 4 * df.myclose + (df.myclose - df.myopen) 

В качестве альтернативы, вы можете использовать dataframe.apply в случае, если функции усложняются.например,

def open_close_calculation(df):
    if df.myopen >= df.myclose:
        return df.myopen X 6 + 4 * df.High + (df.High - df.myclose)
    else:
        return df.myclose X 3 + 4 * df.myclose + (df.myclose - df.myopen) 

df['new_col'] = df.apply(open_close_calculation, axis=1)
1 голос
/ 07 мая 2019

Вы можете использовать np.where:

more_than = ...  # value of new column when more
less_than = ...  # value of new column when less

mydf['newcol'] = np.where(mydf['myopen'] > mydf['myclose'], more_than, less_than)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...