Как объединить несколько столбцов с одним и тем же именем, сохраняя максимальное значение каждый раз? - PullRequest
1 голос
/ 13 октября 2019

Таким образом, у меня есть много столбцов о данных фильма, которые выглядят так, как кадр данных pandas:

 Film     Action, Action, Adventure, Adventure, Biography, Action, Comedy .....
 title1       1      0        0         1          0         0        0   
 title2       0      1        0         0          1         0        1

Этот список становится очень длинным

Что я хочу сделать, так это иметь каждый жанртолько один раз, но если в каком-либо из столбцов с названием жанра есть один, то оставьте их не в 0, так что, по сути, оставьте столбец жанра с самым высоким значением.

обратите внимание, есть другие столбцы, такие как "filmLength ", рейтинг и т. д., которые я не удосужился включить в это.

Таким образом, ожидаемый результат будет выглядеть следующим образом:

film     Action       Adventure        Biography        Comedy
title1      1              1                0               0
title2      1              0                1               1

1 Ответ

1 голос
/ 13 октября 2019

Используйте pd.concat, чтобы сгруппировать столбцы с одинаковыми метками, добавив их. If-else необходимо различать, если имеется более одного столбца или нет. Операция sum(axis = 1) выдаст ошибку для Series (если нет повторений), если оператор if-else не использовался:

new_df=pd.concat([df[col].sum(axis=1).rename(col) if len(df[col].shape)==2 else df[col] for col in df.columns.unique()],axis=1)
print(new_df)

     Film  Action  Adventure  Biography  Comedy
0  title1       1          1          0       0
1  title2       1          0          1       1

Подробности:

Series.unique используется для получения имен меток столбцов без повторений:

df.columns.unique()

Index(['Film', 'Action', 'Adventure', 'Biography', 'Comedy'], dtype='object')

Затем столбцы, имеющиеодно и то же имя метки выбирается с помощью цикла for:

for col in df.columns.unique()

Идея состоит в том, чтобы добавить значения столбцов, которые повторяются для каждой строки, используя df [col] .sum (axis =1). rename используется для присвоения имени повторяющегося столбца серии, полученной из суммы. Таким образом, имя не будет потеряно:

df[col].sum(axis=1).rename(col) for col in df.columns.unique()

, если существует только один столбец с именем Adventure, например. операция суммирования (axis = 1) выдаст ошибку, потому что эта операция не относится к серии, так как серия имеет только одну ось. Таким образом, вы должны использовать эту операцию только в случае повторного столбца. Затем для различения двух случаев используется:

df[col].sum(axis=1).rename(col) if len(df[col].shape)==2 else df[col] for col in df.columns.unique()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...