Я попытался повторно выполнить поиск в стеке, но не смог найти решение моей проблемы
Я хочу объединить столбцы, если они имеют одинаковое имя столбца:
Примере:
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
Любые указатели приветствуются.
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
Вы можете попробовать этот код:
def function(x):
return x.apply(';'.join, 1)
DF = DF.astype(str).groupby(DF.columns, axis=1).agg(function)
Вы можете транспонировать, 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
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.