Есть ли способ получить транспонирование выбранных столбцов только в pandas? - PullRequest
1 голос
/ 02 апреля 2020

У меня большой набор данных, в котором у меня более 350 столбцов, и я хочу преобразовать эти 350 столбцов в строки и значения строк в виде столбцов. Пользователи предоставляют рейтинг "1-10" для брендов, и я хочу показать рейтинг (1-10) как столбцы. Вот как выглядит мой df:

id          Gender       Age            BMW         Audi         VW         Mercedes
1             M          20              3           1           4            2
2             F          50              1           2           3            4
3             F          25              2           1           4            3   

И я хотел бы изменить его таким образом, как желаемый столбец.

id          Gender       Age            Rank1         Rank2           Rank3          Rank4      
1             M          20              Audi        Mercedes          BMW            VW      
2             F          50              BMW          Audi             VW             Mercedes
3             F          25              Audi         BMW              Mercedes       VW        

Таким образом, я могу избавиться от стольких столбцов ... есть решение?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Та же идея, однако вы не можете уменьшить столбец с помощью этого типа transpose

df.set_index(['id','Gender','Age']).stack().\
     reset_index(level=-1).set_index(0,append=True)['level_3'].\
        unstack(-1).add_prefix('rank_').reset_index()
0  id Gender  Age rank_1    rank_2    rank_3    rank_4
0   1      M   20   Audi  Mercedes       BMW        VW
1   2      F   50    BMW      Audi        VW  Mercedes
2   3      F   25   Audi       BMW  Mercedes        VW
2 голосов
/ 02 апреля 2020

Вы можете melt+pivot:

idx = ['id','Gender','Age']
m = df.melt(idx).pivot_table(index=idx,columns='value',values='variable',aggfunc='first')
out = m.add_prefix('Rank').reset_index(idx).rename_axis(index=None,columns=None)

print(out)

   id Gender  Age Rank1     Rank2     Rank3     Rank4
0   1      M   20  Audi  Mercedes       BMW        VW
1   2      F   50   BMW      Audi        VW  Mercedes
2   3      F   25  Audi       BMW  Mercedes        VW
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...