[英]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
垂直连接它们,水平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)
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.