Значения атрибутов продуктов Python для преобразования данных

У меня есть файл excel с такими продуктами, как показано ниже. Можно ли с помощью python совместить одинаковые атрибуты с одним и тем же столбцом?

у меня есть это

категорияназвание123456
настольные игрынастольная игра 1Добрыйсемьяцвет коробкикрасныймасса0,7
настольные игрынастольная игра 2Добрыйкарточная играцвет коробкисинийдлина25
настольные игрынастольная игра 3цвет коробкизеленыймасса0,5длина32

Желаемый результат

категорияназваниеДобрыйцвет коробкимассадлина
настольные игрынастольная игра1семейные игрыкрасный0,7
настольные игрынастольная игра2карточные игрысиний25
настольные игрыboard game3зеленый0.532

у меня есть другой случай с повторяющимися значениями.

categoryname12345678910
смартфоныsamsung1тип симдвойнойцветзеленыйбаран4ГБХранилище128 ГБгод2021
смартфонысамсунг2тип симдвойнойцветзеленыйбаран4ГБхранилище256 ГБгод2021
смартфонысяоми3тип симдвойнойцветсинийбаран6 ГБдлина32ммХранилище128 ГБ

желаемый результат:

categorynamesim typecolorramStoragelengthyear
смартфоныsamsung1двойнойзеленый4ГБ128 ГБnan2021
смартфонысамсунг2двойнойзеленый4ГБ256 ГБnan2021
смартфонысяоми3двойнойсиний6 ГБ128 ГБ32ммnan

сообщение об ошибке:

ValueError: Индекс содержит повторяющиеся записи, не может изменить форму

мой код

Ошибка

ОБНОВЛЕНИЕ_2:

Указатель содержит повторяющиеся записи, не может изменить форму

категорияназвание1234567891011121314151617181920
смартфонысамсунг1тип симдвойнойцветзеленыйбаран4ГБХранилище128 ГБгод2021камерадаотпечаток пальцадаакселерометрдагироскопдаNFCда
смартфонысамсунг2тип симдвойнойцветзеленыйбаран4ГБхранилище256 ГБгод2021камерадаотпечаток пальцада
смартфонысяоми3тип симдвойнойцветсинийбаран6 ГБдлина32ммХранилище128 ГБкамерадаотпечаток пальцада

желаемый результат:

categorynamesim typecolorramStoragelengthyearcamerafingerprintaccelometergyroscopeNFC
смартфоныsamsung1двойнойзеленый4ГБ128 ГБnan2021дадададаno
смартфонысамсунг2двойнойзеленый4ГБ256 ГБnan2021дадаnannannan
смартфонысяоми3двойнойсиний6 ГБ128 ГБ32ммnanдадаnannannan

ошибка 3

Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией, чтобы найти адекватный ответ.

Community 23.04.2022 10:12

Не поделитесь файлом excel. Может быть, есть лучший способ прочитать его или использовать какой-то другой подход.

sammywemmy 23.04.2022 12:07

спасибо за ваш комментарий. wetransfer.com/downloads/…

Ioanna Aspasia Argyrou 23.04.2022 19:54
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
3
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Обновлять

Чтобы решить проблему дублирования, вы можете попробовать:

out = df.set_index(['category', 'name'], append=True).melt(ignore_index=False)
m = out['variable'].astype(int) % 2 == 1
out = (pd.concat([out.loc[m, 'value'].rename('variable'),
                  out.loc[~m, 'value']], axis=1)
         .set_index('variable', append=True)['value']
         .unstack('variable').reset_index(['category', 'name'])
         .rename_axis(columns=None))

Выход:

категорияназваниеХранилищецветдлинабарантип симгод
смартфонысамсунг1128 ГБзеленыйнан4ГБдвойной2021
смартфонысамсунг2256 ГБзеленыйнан4ГБдвойной2021
смартфонысяоми3128 ГБсиний32мм6 ГБдвойнойнан

Старый ответ

В основном вы можете использовать stack и unstack для изменения вашего фрейма данных:

# Separate odd (names) and even (values) columns
out = (pd.concat([df.iloc[:, 2::2].stack().droplevel(1),
                  df.iloc[:, 3::2].stack().droplevel(1)], axis=1)
         .set_index(0, append=True)[1].unstack(0))

out = pd.concat([df.iloc[:, :2], out], axis=1)

Выход:

категорияназваниецвет коробкиДобрыйдлинамасса
настольные игрынастольная игра 1красныйсемьянан0,7
настольные игрынастольная игра 2синийкарточная игра25нан
настольные игрынастольная игра 3зеленыйнан320,5

большое спасибо! Я попробую ваш подход.

Ioanna Aspasia Argyrou 23.04.2022 19:55

Вы пробовали код? Работает ли это для вас?

Corralien 23.04.2022 23:33

Когда мой файл содержит уникальные значения, он работает отлично, но когда я дублирую один и тот же цвет в другом продукте (строке), это дает мне ошибку ниже 3783 # попытка переиндексировать ось с дубликатами 3784, если не self._index_as_unique и len (indexer ): -> 3785 поднять ValueError("невозможно переиндексировать с повторяющейся оси") 3786 3787 def переиндексировать( ValueError: невозможно переиндексировать с дублированной оси

Ioanna Aspasia Argyrou 25.04.2022 01:50

@IoannaAspasiaArgyrou. Можете ли вы обновить свой пост таким примером, пожалуйста?

Corralien 25.04.2022 08:24

я отредактировал свой пост, добавив этот пример

Ioanna Aspasia Argyrou 25.04.2022 17:09

@IoannaAspasiaArgyrou. Это решает вашу проблему?

Corralien 26.04.2022 07:50

Нет, он продолжает выдавать ту же ошибку ValueError: индекс содержит повторяющиеся записи, не может изменить форму. Я добавляю два изображения в свой пост, чтобы вы могли точно увидеть ошибку.

Ioanna Aspasia Argyrou 26.04.2022 09:15

Да, но продолжает выдавать эту ошибку. Если я помещаю уникальные значения в нечетные столбцы (например, меняю зеленый на green_1), он работает отлично, в противном случае зависает.

Ioanna Aspasia Argyrou 26.04.2022 12:05

Оно работает!! я нашел проблему. Мне пришлось написать pd.read_excel(f, dtype=str).fillna('') я удалил эту часть -> .fillna('') и проблема решена! Большое тебе спасибо!!

Ioanna Aspasia Argyrou 26.04.2022 12:19

Я нашел случай, когда у меня такая же ошибка. я сделал обновление в своем посте.

Ioanna Aspasia Argyrou 26.04.2022 12:52

Ваше последнее обновление работает для меня ... Я не могу воспроизвести вашу ошибку

Corralien 26.04.2022 13:46

я добавляю URL-адрес wetransfer с моим фактическим файлом Excel.

Ioanna Aspasia Argyrou 26.04.2022 14:51

Я нашел проблему. У меня есть повторяющиеся имена функций. Большое тебе спасибо!! Я принял твой ответ.

Ioanna Aspasia Argyrou 26.04.2022 16:02

Я обновил свой пост под названием «update2», потому что нашел новый случай, когда код зависает. заранее спасибо! @Корральен

Ioanna Aspasia Argyrou 13.05.2022 17:04

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