Заголовок немного запутан, но, надеюсь, это поможет. Я хочу получить значение values
, когда variableA
== variableB
== variableB
текущей строки. Например, для первой строки, result
будет 54
потому что единственный раз, когда эти условия выполнены в строке 3. Однако, если variableA
== variableB
в текущей строке, то результат будет 0. Пример данных:Python Pandas: выбор значения из строки, когда два значения в этой строке соответствуют значению в столбце
values variableA variableB
0 134 1 3
1 12 2 6
2 43 1 2
3 54 3 3
4 16 2 7
5 37 6 6
Желаемый результат:
values variableA variableB result
0 134 1 3 54
1 12 2 6 37
2 43 1 2 16
3 54 3 3 0
4 16 2 7 NaN
5 37 6 6 0
Не принимая во внимание 0
результат при variableA
и variableB
матч в текущей строке, моя попытка:
vars = df[['variableA', 'variableB']].values
doublematch = (vars[:, None] == vars[None, :] == vars[:, [0]]).all(-1)
df['result'] = df['values'].values @ doublematch #python3
но это явно не работает. Благодаря!
Всегда ли один к одному соответствует колонке дальше? Например, когда переменная B равна 2 в третьей строке, есть два 2, но только один вперед. Что произойдет, если впереди еще больше 2? Случается ли это когда-нибудь? –
Если я правильно понимаю ваш вопрос, да, каждая переменная для переменной «переменная» и «переменная А» встречается более двух раз. Тем не менее, должен быть только один экземпляр, где строка имеет одну и ту же переменную в обоих столбцах (как, например, 'variableA == variableB' для этой строки). Столбцы были сгенерированы из кортежа frozenset, представляющего каждый уникальный кортеж из списка N элементов. –