Python/Pandas: как объединить фреймы данных и преобразовать их в длинную форму?

У меня есть данные в фреймах данных вида (имена столбцов и значений - пустышки):

frame1 =            
           AA        BB
Date_Time                    
2001       1         5
2002       2         6
2017       3         7
2018       4         8

frame2 = 
           AA        BB
Date_Time                    
2001       10         50
2002       20         60
2017       30         70
2018       40         80

Я хотел бы объединить и преобразовать их в фрейм данных длинной формы, который будет визуализирован с помощью seaborn. Так:

frame = 
        stn origin   value
Date
2001    AA  f1      1   
            f2      10
        BB  f1      5   
            f2      50
 ...
 ...
 2018   AA  f1      4   
            f2      40
        BB  f1      8   
            f2      80

Как я могу это сделать? У меня нет никакого кода, чтобы показать, потому что пара нерешительных попыток, которые я предпринял, ни к чему не привели, чего я хочу.

Почему в 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
0
341
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

pd.concat должен работать, чтобы объединить фреймы данных. Не могу понять изменение формы с образцами данных

merged_df = pd.concat([frame1,frame2])

Моя проблема не в том, как объединить кадры данных, а в том, как изменить результат. В частности, я хотел бы иметь столбец для указания кадра данных происхождения значения (потому что это результат разработки с разными параметрами).

Fabio Capezzuoli 10.04.2019 06:02
Ответ принят как подходящий

Что ж, Равишанкар указал мне правильное направление. С некоторыми поисками я нашел (почти), как это сделать, используя concat с групповыми ключами и двойным стеком:

foo = pds.concat(dict(f1 = frame1, f2 = frame2), axis=1)

foo.stack().stack()

Date         
2001       AA  f1    1
               f2    10
           BB  f1    5
               f2    50
2002       AA  f1    2
               f2    20
           BB  f1    6
               f2    60

Однако этот метод создаст серию с мультииндексом, что подходит не для всех ситуаций.
Чтобы создать фрейм данных с одним индексом (годами), можно использовать следующее:

bar = foo.stack().stack().reset_index(level=[1,2]).

Затем столбцы можно переименовать в соответствии с необходимостью.

Для будущих пользователей, у которых может возникнуть такая же проблема, было бы лучше, если бы вы приняли свой собственный ответ. Слияние, предложенное в другом ответе, явно не дает того, что вы искали.

CAPSLOCK 10.04.2019 11:17

Я должен ждать, пока система позволит мне это сделать, через два дня.

Fabio Capezzuoli 10.04.2019 11:20

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