Используйте 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()