Учитывая следующие данные:
var_1 var_2 var_3
0 5.0 7.0 3.0
1 4.0 5.0 10.0
2 4.0 9.0 7.0
3 9.0 10.0 4.0
4 4.0 9.0 3.0
вывод должен быть:
var_3 var_4 var_5 var_7 var_9 var_10
0 3 0 1 2 0 0
1 0 1 2 0 0 3
2 0 1 0 3 2 0
3 0 3 0 0 1 2
4 3 1 0 0 2 0
Это не типичный поворот, и хотя это можно сделать с помощью чего-то вроде iterrows
, я чувствую, что должен быть более приятный подход.
Случилось так, что значения из строк используются для столбцов, а суффиксы столбцов используются для значений ячеек.
В вопросе содержится именно та информация, которая необходима для ответа на него - закрытие его не имеет для меня никакого смысла, поэтому некоторые объяснения будут оценены.
Сначала получите новые имена столбцов с помощью rename
для значений после _
, разверните с помощью DataFrame.melt , добавьте value
к индексу с помощью DataFrame.set_index и измените форму с помощью Series.unstack, наконец, очистка некоторых столбцов данных:
f = lambda x: int(x.split('_')[1])
df = (df.rename(columns=f)
.melt(ignore_index=False)
.set_index('value', append=True)['variable']
.unstack(fill_value=0)
.rename(columns=int)
.add_prefix('var_')
.rename_axis(None, axis=1))
print (df)
var_3 var_4 var_5 var_7 var_9 var_10
0 3 0 1 2 0 0
1 0 1 2 0 0 3
2 0 1 0 3 2 0
3 0 3 0 0 1 2
4 3 1 0 0 2 0
Я голосую за повторное открытие, потому что оно было ошибочно закрыто.