Я новичок в Python и был бы признателен, если бы кто-нибудь помог с этим:
У меня есть набор данных, который выглядит так:
Знаменитость1 | Знаменитость2 | Знаменитость3 | Голоса |
---|---|---|---|
Брэд Питт | Анджелина Джоли | - | 49 |
Уилл Смит | Крис Рок | Джастин Бибер | 55 |
Я хочу «сгладить» эту базу данных, чтобы она выглядела так:
Знаменитость | Голоса |
---|---|
Брэд Питт | 49 |
Анджелина Джоли | 49 |
Уилл Смит | 55 |
Крис Рок | 55 |
Джастин Бибер | 55 |
Как я могу сделать это в Python?
#here is the code for the initial dataframe
data = {'Celebrity1': ['Brad Pitt','Will Smith'], 'Celebrity2': ['Angelina Jolie', 'Chris Rock'],'Celebrity3': [None,'Justin Bieber'],'Votes': [49,55]}
df = pd.DataFrame(data)
Вы можете использовать wide_to_long
:
out = (pd.wide_to_long(df.reset_index(), stubnames='Celebrity', i='index', j='j')
.dropna().sort_values(by='Votes').reset_index(drop=True))
Другой вариант — использовать set_index
+ stack
:
df = df.set_index('Votes').stack().droplevel(-1).reset_index(name='Celebrity')[['Celebrity','Votes']]
Выход:
Celebrity Votes
0 Brad Pitt 49
1 Angelina Jolie 49
2 Will Smith 55
3 Chris Rock 55
4 Justin Bieber 55