Объединение списка фреймов данных

Мне нужна была простая pandas поддержка. Я пытаюсь объединить список фреймов данных. У меня есть список фреймов данных, который выглядит следующим образом.

Month   First   Second  Third
Jan     4535    34534   54662
Feb     6768    846     2545
Mar     978     23      1255
Apr     356     9766    7855
            
            
Quarter First   Second    Third
Q1      85456     3256     6455
Q2      41256     125432   1356
Q3      45546     13565    15646
Q4      746       13456    16545
            
            
Calendar    First   Second      Third
1/01/2021   1452    56853       45698635
1/02/2021   16565   5653463     565746
1/02/2021   566534  465464665   485634
1/03/2021   4653    126689      465874

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

Date        First   Second  Third   Type
Jan         4535    34534   54662   Month
Feb         6768    846     2545    Month
Mar         978     23      1255    Month
Apr         356     9766    7855    Month
Q1          85456   3256    6455    Quarter
Q2          41256   125432  1356    Quarter
Q3          45546   13565   15646   Quarter
Q4          746     13456   16545   Quarter
1/01/2021   1452    56853   45698635    Calendar
1/02/2021   16565   5653463 565746  Calendar
1/02/2021   566534  465464665   485634  Calendar
1/03/2021   4653    126689  465874  Calendar

Любая помощь будет оценена по достоинству.

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
35
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Используйте pd.concat

out = pd.concat([df.assign(Type=df.columns[0]).rename(columns = {df.columns[0]: 'Date'})
                    for df in [df1, df2, df3]], ignore_index=True)
print(out)

# Output
         Date   First     Second     Third      Type
0         Jan    4535      34534     54662     Month
1         Feb    6768        846      2545     Month
2         Mar     978         23      1255     Month
3         Apr     356       9766      7855     Month
4          Q1   85456       3256      6455   Quarter
5          Q2   41256     125432      1356   Quarter
6          Q3   45546      13565     15646   Quarter
7          Q4     746      13456     16545   Quarter
8   1/01/2021    1452      56853  45698635  Calendar
9   1/02/2021   16565    5653463    565746  Calendar
10  1/02/2021  566534  465464665    485634  Calendar
11  1/03/2021    4653     126689    465874  Calendar

Используйте pd.concat, чтобы соединить их по вертикали, bfill по горизонтали (axis=1), чтобы объединить столбцы с разными именами, затем insert и drop:

dataframes = {
    'Month': df1,
    'Quarter': df2,
    'Calendar': df3,
}

df = pd.concat([d.assign(Type=col) for col, d in dataframes.items()])
df.insert(0, 'Date', df[list(dataframes)].bfill(axis=1).iloc[:, 0])
df = df.drop(list(dataframes), axis=1).reset_index(drop=True)

Выход:

>>> df
         Date   First     Second     Third      Type
0         Jan    4535      34534     54662     Month
1         Feb    6768        846      2545     Month
2         Mar     978         23      1255     Month
3         Apr     356       9766      7855     Month
4          Q1   85456       3256      6455   Quarter
5          Q2   41256     125432      1356   Quarter
6          Q3   45546      13565     15646   Quarter
7          Q4     746      13456     16545   Quarter
8   1/01/2021    1452      56853  45698635  Calendar
9   1/02/2021   16565    5653463    565746  Calendar
10  1/02/2021  566534  465464665    485634  Calendar
11  1/03/2021    4653     126689    465874  Calendar

Вы пропустили колонку Type :)

Corralien 19.03.2022 00:02

Ой! такого не видел :)

richardec 19.03.2022 00:02

@Corralien исправил это.

richardec 19.03.2022 00:05
import pandas as pd
import numpy as np

#import csv

a = pd.read_csv("a.csv").dropna()
b = pd.read_csv("b.csv").dropna()
c = pd.read_csv("c.csv").dropna()

a['Type'] = 'Month'
b['Type'] = 'Quarter'
c['Type'] = 'Calendar'
a = a.rename(columns = {"Month": "Date"})
b = b.rename(columns = {"Quarter": "Date"})
c = c.rename(columns = {"Calendar": "Date"})

frames = [a, b, c]
result = pd.concat(frames)

result


Date    First   Second  Third   Type

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