Я попытался повторно выполнить поиск в стеке, но не смог найти решение моей проблемы

Я хочу объединить столбцы, если они имеют одинаковое имя столбца:

Примере:

input = { 'A' : [0,1,0,1,0], 'B' : [0,1,1,1,1], 'C':[1,1,1,1,0],
          'D' : [1,1,0,0,0], 'E' : [1,0,1,0,1]}

df = pd.DataFrame(input)
df.columns = ['A','B','C','C','B']

   A  B  C  C  B
0  0  0  1  1  1
1  1  1  1  1  0
2  0  1  1  0  1
3  1  1  1  0  0
4  0  1  0  0  1

Пожеланная выходная мощность:

   A    B    C
0  0  0;1  1;1
1  1  1;0  1;1
2  0  1;1  1;0
3  1  1;0  1;0
4  0  1;1  0;0

Любые указатели приветствуются.

2
Toros91 21 Янв 2021 в 11:30

3 ответа

Лучший ответ

Вы можете группировать по именам столбцов, а для дубликатов получить DataFrame, поэтому используется apply с join для объединения по строкам:

DF = DF.astype(str).groupby(DF.columns, axis=1).agg(lambda x: x.apply(';'.join, 1))

Или же:

DF = DF.astype(str).groupby(DF.columns, axis=1).agg(lambda x: [';'.join(y) for y in x.to_numpy()])

print (DF)
   A    B    C
0  0  0;1  1;1
1  1  1;0  1;1
2  0  1;1  1;0
3  1  1;0  1;0
4  0  1;1  0;0
4
jezrael 21 Янв 2021 в 08:36

Вы можете попробовать этот код:

def function(x):
    return x.apply(';'.join, 1)


DF = DF.astype(str).groupby(DF.columns, axis=1).agg(function)
2
Robot Jung 21 Янв 2021 в 08:45

Вы можете транспонировать, groupby, объедините строки и перенесите обратно:

df.T.astype('str').groupby(level=0).agg(';'.join).T

Выход:

   A    B    C
0  0  0;1  1;1
1  1  1;0  1;1
2  0  1;1  1;0
3  1  1;0  1;0
4  0  1;1  0;0
1
Mykola Zotko 21 Янв 2021 в 09:46
65823592