Python 熊猫:基于公共列名将多个数据帧中的列提取到新的数据帧中

Python 熊猫:基于公共列名将多个数据帧中的列提取到新的数据帧中,python,excel,pandas,dataframe,Python,Excel,Pandas,Dataframe,我有4个从Excel导入的数据集,包含2013年、2014年、2015年和2016年学校的总预算。所有数据集都有一个公共列,其中包含每个学校的ID代码(列LAESTAB) 我想要一个新的数据集,左边是公共列LAESTAB(4个数据集的值相同),接下来是列total2013、total2014、total2015和total2016(来自不同的数据集) 我还想去掉其余的数据,包括并非所有数据集中都存在的学校ID 我将尝试在一个示例中进一步阐述: 以下是其中一个Excel数据集的示例: >&g

我有4个从Excel导入的数据集,包含2013年、2014年、2015年和2016年学校的总预算。所有数据集都有一个公共列,其中包含每个学校的ID代码(列LAESTAB)

我想要一个新的数据集,左边是公共列LAESTAB(4个数据集的值相同),接下来是列total2013、total2014、total2015和total2016(来自不同的数据集)

我还想去掉其余的数据,包括并非所有数据集中都存在的学校ID

我将尝试在一个示例中进一步阐述:

以下是其中一个Excel数据集的示例:

>>> print cuts2016.head()

    LA_codelocal_authority_name    UPIN  URN  LAESTAB  \
0      201       City of London  500000  0.0  2013614   
1      202               Camden  500005  0.0  2022095   
2      202               Camden  500007  0.0  2022219   
3      202               Camden  500012  0.0  2022502   
4      202               Camden  500014  0.0  2022603   

       School Name Academy?    Phase Provider Type  \
0  Sir John Cass's Foundation Primary School       No  Primary        School   
1                     Carlton Primary School       No  Primary        School   
2                       Fleet Primary School       No  Primary        School   
3                        Rhyl Primary School       No  Primary        School   
4                    Torriano Primary School       No  Primary        School   


   MFG protection (+ve) or capping/scaling (-ve)  total2016  \
0                                          35000    1659000   
1                                          68000    1956000   
2                                         -10000    1059000   
3                                          97000    2234000   
4                                              0    2284000  
2005年的另一个Excel数据集:

print cuts2015.head()
   LA_code local_authority_name  UPIN     URN  LAESTAB  \
0      201       City of London   NaN  100000  2013614   
1      202               Camden   NaN  100008  2022019   
2      202               Camden   NaN  100009  2022036   
3      202               Camden   NaN  100010  2022065   
4      202               Camden   NaN  100011  2022078   

                                 school_name    Phase Provider Type  \
0  Sir John Cass's Foundation Primary School  Primary        School   
1                      Argyle Primary School  Primary        School   
2                    Beckford Primary School  Primary        School   
3                   Brecknock Primary School  Primary        School   
4                  Brookfield Primary School  Primary        School   

  Basic Entitlement Total Funding Deprivation Total Funding total_pre_MFG  \
0                       1,206,000                   215,000     1,644,000   
1                       1,333,000                   367,000     2,068,000   
2                       1,482,000                   359,000     2,221,000   
3                       1,234,000                   348,000     1,974,000   
4                       1,436,000                   256,000     2,028,000   

  MFG protection (+ve) or capping/scaling (-ve) total2015  \
0                                             0   1644000   
1                                        25,000   2093000   
2                                             0   2221000   
3                                        72,000   2046000   
4                                       -58,000   1970000   
我需要的最终结果如下(应显示total2014和total2013):

我尝试了下面的“reduce”,但它返回0行×66列

dataframe_list = [cuts2013, cuts2014, cuts2015, cuts2016]
df_final = reduce(lambda left,right: pd.merge(left,right,on='LAESTAB'), dataframe_list)

使用LAESTAB列合并dataframes SQL样式,然后根据需要从
data\u merged
中删除列

import pandas as pd
data_merged = pd.merge(cuts2016,cuts2015,on = "LAESTAB")
有关合并的详细信息,请查看以下链接:


使用LAESTAB列合并dataframes SQL样式,然后根据需要从
data\u merged
中删除列

import pandas as pd
data_merged = pd.merge(cuts2016,cuts2015,on = "LAESTAB")
有关合并的详细信息,请查看以下链接:


一种方法是使用merge,正如Mainul Islam指出的那样。在这里,您必须执行3个合并操作来合并4个数据帧。否则,您可以连接所有4个数据帧并执行groupby操作

dataframe_list = [cuts2013, cuts2014, cuts2015, cuts2016]
total = pd.concat(dataframe_list)
total = total.groupby('LAESTAB')['total2013', 'total2014', 'total2015','total2016'].sum().reset_index()

一种方法是使用merge,正如Mainul Islam指出的那样。在这里,您必须执行3个合并操作来合并4个数据帧。否则,您可以连接所有4个数据帧并执行groupby操作

dataframe_list = [cuts2013, cuts2014, cuts2015, cuts2016]
total = pd.concat(dataframe_list)
total = total.groupby('LAESTAB')['total2013', 'total2014', 'total2015','total2016'].sum().reset_index()

它只适用于2个数据集。如何合并4个数据集<代码>错误类型错误:无法将['left']与块值进行比较假设您有名为
dataset\u 1、dataset\u 2、dataset\u 3和dataset\u 4的数据集
。一旦您合并了
dataset\u 1
dataset\u 2
,我们假设您得到一个名为
merged\u dataframe
的数据帧。现在将
dataset\u 3
merged\u dataframe
合并,并使用
dataset\u 4
重复该过程。这不是最好的主意,但它应该能完成任务。尝试过@mainul islam,但返回0行
data\u merged2=pd。merge(data\u merged,cuts2014,on=“LAESTAB”)
它只适用于2个数据集。如何合并4个数据集<代码>错误类型错误:无法将['left']与块值进行比较假设您有名为
dataset\u 1、dataset\u 2、dataset\u 3和dataset\u 4的数据集
。一旦您合并了
dataset\u 1
dataset\u 2
,我们假设您得到一个名为
merged\u dataframe
的数据帧。现在将
dataset\u 3
merged\u dataframe
合并,并使用
dataset\u 4
重复该过程。这不是最好的主意,但它应该可以完成任务。尝试了@mainul islam,但返回0行
data\u merged2=pd.merge(data\u merged,cuts2014,on=“LAESTAB”)