У меня есть фрейм данных df
со столбцами: [value
, arg1
, arg2
, diff_value
]. Я хочу найти все строки, где (diff_value, arg1, arg2) в df
(как первые 3 столбца). Мой код для этого:
contains_df = df.merge(df,
left_on=['value', 'arg1', 'arg2'],
right_on=['diff_value', 'arg1', 'arg2'])\
.drop(columns=['value_y', 'diff_value_y'])\
.rename(columns={'value_x':'value', 'diff_value_x':'diff_value'})
Тогда я бы предположил, что df[df.value == 'a']
, где 'a'
- это значение diff_value
в строке 1 contains_df
, будет получена хотя бы одна строка. Однако я не получаю строк, подразумевая, что мое слияние не сделало то, что я ожидал. Как мне это исправить?
Например, с:
df = pd.DataFrame({'value':['a', 'b', 'c', 'd'], 'arg1': [1, 1, 0, 0],
'arg2':[0, 0, 1, 1], 'diff_value':['z', 'a', 'b', 'y']})
Я ожидаю, что результатом будет строка 2: [value:'b', arg1:1, arg2:1, diff_value:'a']
, поскольку ('a'
, 1, 0) находится в строке 1 как (значение, arg1, arg2). Однако вместо этого выводится строка 1.