У меня есть кадр данных Pandas со следующими столбцами
game_id, date, country, winner_name, winner_age, ... winner_ranking, loser_name, loser_age, ... loser_ranking
1 1/2/10 UK . Ben 21 12 Michael 22 . 13
Я хочу изменить его формат на следующий
game_id, date, country, competitor, name, age, ranking
1 1/2/10 UK winner Ben 21 12
1 1/2/10 UK loser Michael 22 13
Т.е. для каждого столбца, начинающегося с префикса winner_'или' loser_ ', удалите этот префикс и разделите победителя и проигравшего на разные строки.Список переменных победителя и проигравшего довольно длинный, поэтому он не очень полезен, если мне нужно жестко кодировать.
Вот как я сейчас это делаю, мне интересно, если, например, есть более аккуратный подходиспользуя расплав?
winner_df = combined_df.loc[:,[x for x in colnames if 'loser_' not in x]]
winner_df.columns = [c.replace('winner_','') for c in winner_df.columns]
winner_df['competitor'] = 'winner'
loser_df = combined_df.loc[:,[x for x in colnames if 'winner_' not in x]]
loser_df.columns = [c.replace('loser_','') for c in loser_df.columns]
loser_df['competitor'] = 'loser'
long_df = winner_df.append(loser_df,sort=False)