У меня проблема с индексами в фрейме данных. У меня есть данные, которые выглядят примерно так:
df1 = pd.DataFrame({'Name': ['ABC-123', 'DEF-456', 'GHI-789', 'JKL-321'],
'A1': [111, 222, 333, 444],
'A2': [555, 666, 777, 888],
'A3': [999, 123, 456, 789],
'A4': [101, 202, 303, 404],
'QQ': [1.3, 2.5, 3.7, 4.9]});
Я работал с данными, и в какой-то момент я создал аналогичный фрейм данных с некоторыми данными из исходного, но где-то произошло смесь индексов данных, поэтому новые данные выглядят следующим образом:
df2 = pd.DataFrame({'A1': [444, 222, 111, 333],
'A2': [888, 666, 555, 777],
'A3': [789, 123, 999, 456],
'A4': [404, 202, 101, 303]});
Данные в строках в порядке, только индексы неверны, поэтому мне нужен новый фрейм данных как есть, но с индексы строк во втором кадре данных, соответствующие индексам в первом кадре данных, то есть, например, первая строка с номерами 444, 888, 789 и 404 должна иметь индекс 3, а не 0. Как я могу это сделать? Мне, вероятно, следует сравнить каждую строку второго кадра данных с первым кадром данных, и если строка во втором кадре данных совпадает с данными в строке первого кадра данных, изменить индекс этой строки во втором кадре данных на индекс соответствующей строки первого кадра данных, но я понятия не имею, как это сделать. Есть предложения?
Обновления из комментариев:
- Мне нужны эти индексы, но они мне нужны правильно, поэтому они совпадают, то есть индексы во второй таблице следуют за индексами в первый. Кроме того, я не могу использовать какой-либо столбец по отдельности, поскольку не является уникальным. Только вся строка уникальна.
- Я, вероятно, должен добавить, что эти две таблицы не настоящие, а созданы в качестве примера, и теперь я вижу, что столбец ID вводит в заблуждение. Я изменил его на AA, чтобы избежать путаницы. Итак, как я сказал выше, столбцы не уникальны, уникальна только строка в целом. В реальных таблицах более 200 столбцов и тысячи строк.
- Я не могу включить код, так как он большой, сложный, и я понятия не имею, где происходит путаница. Также это не имеет значения, поскольку данные, о которых я говорю, уже собраны и сохранены в файлах CSV, поэтому два фрейма данных фактически будут импортированы из этих файлов. И вот моя проблема. Я не могу повторно запустить исходный код, даже если исправлю его, потому что это займет две недели. Мне нужно исправить индексы во втором фрейме данных, что, как я подозреваю, не так уж сложно, если кто-то знает, как это сделать. Как я уже сказал, с данными в строках все в порядке, только индексы перепутаны
- Нет, это просто название этой штуки, остальные данные о ней. Под индексом я подразумеваю индекс фрейма данных, поскольку он создается по умолчанию pandas при создании фрейма данных. Вся проблема в том, что я создал первый фрейм данных, импортировав данные из файла CSV, проделал очень трудоемкую работу с этими данными и экспортировал результат в другой файл CSV. Когда позже я импортировал второй файл CSV для анализа, я обнаружил, что индексы строк с одинаковыми данными не совпадают. Так что теперь мне нужно исправить индексы, иначе я потеряю около двух недель работы
- Да, это подмножество строк и столбцов. Данные должны быть одинаковыми, только индексы перепутаны. Если бы я мог сравнить каждую строку df2 с df1, чтобы узнать, каков индекс этой строки данных в df1, а затем изменить индекс этой строки в df2, это устранило бы проблему. Мне просто нужны индексы строк в df2, соответствующие индексам соответствующих строк df1. Индексы df2 перепутаны. Индексы в df1 такие, какими они должны быть в обоих фреймах данных.
- Нет, df2 имеет только некоторые столбцы df1 и некоторые строки df1, но данные будут совпадать между ними. Порядок другой, значит, индексы разные, если они одинаковые. Но я думаю, что можно отсортировать строки, чтобы индексы не были в порядке.