Python-CSV Несколько столбцов с одинаковым заголовком в один столбец

У меня есть файл CSV с данными компании с 22 строками и 6500 столбцами. Столбцы имеют одинаковые имена, и я должен собрать столбцы с одинаковыми именами в отдельные столбцы в соответствии с их заголовками.

Теперь у меня есть данные в одном df следующим образом:

Y   C   Y   C   Y   C

1.  a   1.  b.  1.  c.

2.  a.  2.  b.  2.  c.  

и мне нужно получить это так:

Y   C

1.  a. 

2.  a. 

1.  b.

2.  b.

1.  c.

2.  c. 

Можете ли вы предоставить какой-либо минимальный воспроизводимый пример и желаемый результат?

Zelemist 10.11.2022 15:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
95
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы попробовал попытку, когда вы нарезаете df на куски по итерации и объединяете их вместе, поскольку имена столбцов не могут быть четко идентифицированы.

РЕДАКТИРОВАТЬ
Измененный ответ на новый ввод:

chunksize = 2
df = (
    pd.concat(
        [
            df.iloc[:, i:i+chunksize] for i in range(0, len(df.columns), chunksize)
        ]
    )
    .reset_index(drop=True))
print(df)
   Y  C
0  1  a
1  2  a
2  1  b
3  2  b
4  1  c
5  2  c

Это складывает столбцы, но оставляет «старые» столбцы во фрейме данных.

lordjolderoi 11.11.2022 16:51

да, результат в stacked_df. Исходный фрейм данных df остается нетронутым. Если вы этого не хотите, просто измените имя с stacked_df на df, и исходный df будет перезаписан.

Rabinzel 11.11.2022 17:03

Я не мог удержаться от поиска решения. Лучшее, что я нашел до сих пор, объясняет тот факт, что pd.read_csv обращается к повторяющимся именам столбцов, добавляя «.N» к дубликатам.

In [2]: df = pd.read_csv('duplicate_columns.csv')
In [3]: df
Out[3]:
   1  2  3  4 1.1 2.1 3.1 4.1 1.2 2.2 3.2 4.2
0  a  q  j  e   w   e   r   t   y   u   d   s
1  b  w  w  f   c   e   f   g   d   c   s   a
2  d  q  e  h   c   f   b   f   a   w   q   r

Чтобы поместить ваши данные в тот же столбец...

  1. Сгруппируйте столбцы по их первоначальным именам.
  2. Примените Flattener для преобразования в серию массивов.
  3. Создайте новый фрейм данных из серии, рассматриваемой как dict.
In [3]: grouper = lambda l: l.split('.')[0]    # peels off added suffix
In [4]: flattener = lambda v: v.stack().values # reshape groups
In [4]: pd.DataFrame(df.groupby(by=grouper, axis='columns')
   ...:                .apply(flattener)
   ...:                .to_dict())
Out[4]:
   1  2  3  4
0  a  q  j  e
1  w  e  r  t
2  y  u  d  s
3  b  w  w  f
4  c  e  f  g
5  d  c  s  a
6  d  q  e  h
7  c  f  b  f
8  a  w  q  r

Я бы хотел увидеть более чистое, менее тупое общее решение.

Другие вопросы по теме