[英]Python - Merge dataframe name contains in list
我有2個數據框(現在我說2個,但我們可以有n個數據框)。 數據框的名稱在列表中。 我想加入名稱出現在列表中的所有數據框
import pandas as pd
data1 = [['Alex',10],['Bob',12],['Clarke',13]]
df1 = pd.DataFrame(data1,columns=['Name','Age'])
data2 = [['David',10],['Alain',12],['Rob',13]]
df2 = pd.DataFrame(data2,columns=['Name','Age'])
list = ['df1','df2']
# i want something to work like
df3 = pd.Concat(list)
感謝您的幫助。
您需要將名稱設置為索引,然后執行concat
list = [df1,df2]
pd.concat([x.set_index('Name') for x in list],axis=1)
Out[270]:
Age Age
Alain NaN 12.0
Alex 10.0 NaN
Bob 12.0 NaN
Clarke 13.0 NaN
David NaN 10.0
Rob NaN 13.0
或使用reduce
+ merge
from functools import reduce
df = reduce(lambda left,right: pd.merge(left,right,on=['Name'],
how='outer'), list)
df
Out[275]:
Name Age_x Age_y
0 Alex 10.0 NaN
1 Bob 12.0 NaN
2 Clarke 13.0 NaN
3 David NaN 10.0
4 Alain NaN 12.0
5 Rob NaN 13.0
如果要合並結果,請使用:
pd.concat([df1, df2], ignore_index=True)
# Name Age
#0 Alex 10
#1 Bob 12
#2 Clarke 13
#3 David 10
#4 Alain 12
#5 Rob 13
不要將變量名用作list
。 遍歷列表以獲取數據幀的實例,然后進行串聯
lis = ['df1','df2']
df3 = pd.concat([globals()[i] for i in lis]) # to get instance of df1 from string 'df1'
df3
產量
Name Age
Alex 10
Bob 12
Clarke 13
David 10
Alain 12
Rob 13
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.