Сравнить несколько фреймов данных Добавить новую колонку с двоичными значениями для соответствий - PullRequest
2 голосов
/ 14 февраля 2020

Допустим, у меня есть 2 кадра данных. Один со слитым фреймом данных всех экземпляров, а другой только с уникальными экземплярами идентификатора столбца.

df1 выглядит примерно так:

|    id    |    playlist name
|  459291  |    new music friday
|  349532  |    new music friday
|  459291  |    top hits
|  719300  |    new music friday
|  349532  |    top hits
|  459291  |    oldies
|  649202  |    top hits
|  459291  |    workout

df2 выглядит примерно так:

|    id    |    playlist name
|  459291  |    new music friday
|  349532  |    new music friday
|  719300  |    new music friday
|  649202  |    top hits

Я хочу создать новые столбцы в df2 для каждого значения в столбце «имя списка воспроизведения» и выведите 1 или 0, если уникальное значение в «id» имеет соответствующее «имя списка воспроизведения». Затем я бы опустил столбец «имя плейлиста». Итак, мой ожидаемый результат, который я ищу, будет примерно таким:

|    id    |    new music friday  |     top hits    |     oldies    |  workout |
|  459291  |           1          |        1        |        1      |     1    |
|  349532  |           1          |        1        |        0      |     0    |
|  719300  |           1          |        0        |        0      |     0    |
|  649202  |           0          |        1        |        0      |     0    |

Я чувствую, что это может быть сделано с использованием только объединенного фрейма данных, но я не уверен, как бы я отбросил дубликаты, сохраняя новые значения столбца для каждого уникального идентификатора. любая помощь с благодарностью!

1 Ответ

1 голос
/ 14 февраля 2020

Это способ сделать это с pivot_table() по причине, по которой я не могу обойтись без необходимости добавлять столбец aux:

import pandas as pd
df = pd.DataFrame({'id':[459291,349532,459291,719300,349532,459291,649202,459291],
                   'playlist':['new','new','top','new','top','old','top','workout']})
df['aux'] = 1
new_df = pd.pivot_table(df,index='id',columns=['playlist'],aggfunc='count',values='aux').fillna(0).astype(int)
print(new_df)

Вывод:

playlist  new  old  top  workout
id                              
349532      1    0    1        0
459291      1    1    1        1
649202      0    0    1        0
719300      1    0    0        0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...