Вы можете использовать melt
для изменения формы DataFrame, а затем сохранить только соответствующие столбцы и строки, используя query
для выбора строк и drop
для удаления устаревшего столбца, например:
(df.melt(id_vars=['ID', 'D'], var_name='X')
.query('value == 1')
.drop(columns=['value']))
# ID D X
#0 1 3 A
#1 2 2 A
#3 1 3 B
#7 2 2 C
#8 3 8 C
DataFrame после расплавления выглядит следующим образом:
# ID D X value
#0 1 3 A 1
#1 2 2 A 1
#2 3 8 A 0
#3 1 3 B 1
#4 2 2 B 0
#5 3 8 B 0
#6 1 3 C 0
#7 2 2 C 1
#8 3 8 C 1
При использовании ID
и D
как id_vars
, они дублируются для каждого другого значения всех других переменных (A
, B
и C
).Значения этих столбцов теперь находятся в столбце value
.Затем нужно сохранить строки, в которых value == 1