I have a pandas dataframe like
| user_id | music_id | has_rating |
|---|---|---|
| A | a | 1 |
| B | b | 1 |
and I would like to automatically add new rows for each of user_id & music_id for those users haven’t rated, like
| user_id | music_id | has_rating |
|---|---|---|
| A | a | 1 |
| A | b | 0 |
| B | a | 0 |
| B | b | 1 |
for each of user_id and music_id combination pairs those are not existing in my Pandas dataframe yet.
is there any way to append such rows automatically like this?
Advertisement
Answer
You can use a temporary reshape with pivot_table and fill_value=0 to fill the missing values with 0:
(df.pivot_table(index='user_id', columns='music_id',
values='has_rating', fill_value=0)
.stack().reset_index(name='has_rating')
)
Output:
user_id music_id has_rating 0 A a 1 1 A b 0 2 B a 0 3 B b 1