Я пытаюсь использовать комбинации словарей для генерации условного столбца в DataFrame.

Первый словарь содержит список всех возможных условий, которые приводят к Bool {{x0}} или {{x1}}.

Второй словарь назначает комбинации условий для бизнес-правил, которые я хочу позвонить, чтобы создать условный столбец в моем датефараме.

# testing df
d = {'col1': [1, 2, 3, 4, 5], 'col2': ['apple', 'pear', 'banana', 'apple', 'cookie']}

# making the df
df = pd.DataFrame(d)

# all possible testing conditions
df_conds = {
    1: eval("df['col1'] == 3"),
    2: eval("df['col1'] >= 3"),
    3: eval("df['col2'] == 'apple'")
}

# assigning combinations of conditions to business rules
df_cond_assignments = {
    'br1' : [1, 2],
    'br2' : [1, 2, 3],
    'br3' : [3],
    'br4' : [2, 3]
}

Я хочу позвонить {{x0}}, например, создать мою условный столбец, применяя условия 2 и 3.

result_df['result'] = df_conds[df_cond_assignments.get('br4')]

Этот код приводит к {{x0}}, и я понимаю, почему. Однако я не уверен, как делать то, что я пытаюсь сделать.

Еще один способ, которым я пытался

result_df = df_conds.get(key for key in [df_cond_assignments.get('br4')])

Который возвращает {{x0}}

Например, если я применю {{x0}} правильный результат будет выглядеть так:

result:
false
false
false
true
false
1
Whitewater 8 Окт 2020 в 18:46

1 ответ

Лучший ответ

Работает ли это для вас:

np.logical_and.reduce([df_conds[i] for i in df_cond_assignments['br4']])

Выход:

array([False, False, False,  True, False])
1
Scott Boston 8 Окт 2020 в 16:07