Создайте новую серию условных фреймов данных из нескольких фреймов данных - PullRequest
0 голосов
/ 17 июня 2020

Я хочу создать новый фрейм данных из нескольких фреймов данных в одном операторе.

Например:

df.loc[(df[[A,B]].mean(axis=1) <= Const1), 'D'] = df['F']

df.loc[(df[[A,B]].mean(axis=1) >  Const1) & (df['E']<=Const2), 'D'] = df['G']

df.loc[(df[[A,B]].mean(axis=1) >  Const1) & (df['E']> Const2), 'D'] = df['H'] 

TO

df['D'] = 'some statement'

1 Ответ

0 голосов
/ 17 июня 2020

Используя np.select, как в предоставленной ссылке, даже если вы хотите, чтобы выбор был последовательным, а не постоянным, он работает таким же образом.

import pandas as pd
import numpy as np

# example data
np.random.seed(0)
df = pd.DataFrame(np.random.randint(0,100, 30).reshape(-1, 6), 
                  columns=list('ABEFGH'))
Const1, Const2 = 50, 50

# conditions
conds = [(df[['A','B']].mean(axis=1) <= Const1), 
         (df[['A','B']].mean(axis=1) >  Const1) & (df['E']<=Const2), 
         (df[['A','B']].mean(axis=1) >  Const1) & (df['E']> Const2)]
# choices that are series
choices = [df['F'], df['G'], df['H']]

#use np.select
df['D'] = np.select(condlist=conds, choicelist=choices)
print(df)
    A   B   E   F   G   H   D
0  44  47  64  67  67   9  67 #value from F
1  83  21  36  87  70  88  70 #value from G
2  88  12  58  65  39  87  65
3  46  88  81  37  25  77  77 #value from H
4  72   9  20  80  69  79  80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...