繁体   English   中英

连接数据框列表

[英]Concatenating list of data frames

我需要一个简单的pandas支持。 我正在尝试连接 dataframe 的列表。我有一个 dataframe 的列表,如下所示。

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

我想要的 output:

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

任何帮助,将不胜感激。

使用pd.concat垂直连接它们,水平bfillaxis=1 )以组合非同名列,然后insertdrop

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)

Output:

>>> 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

使用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
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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM