Python 如何使用公共键对三个不同数据帧中的列求和

Python 如何使用公共键对三个不同数据帧中的列求和,python,pandas,Python,Pandas,我正在读一份excel电子表格,里面有三张关于学校的表格,如下所示 import sys import pandas as pd inputfile = sys.argv[1] xl = pd.ExcelFile(inputfile) print xl.sheet_names df1 = xl.parse(xl.sheet_names[0], skiprows=14) df2 = xl.parse(xl.sheet_names[1], skiprows=14) df3 = xl.parse(xl

我正在读一份excel电子表格,里面有三张关于学校的表格,如下所示

import sys
import pandas as pd
inputfile = sys.argv[1]
xl = pd.ExcelFile(inputfile)
print xl.sheet_names
df1 = xl.parse(xl.sheet_names[0], skiprows=14)
df2 = xl.parse(xl.sheet_names[1], skiprows=14)
df3 = xl.parse(xl.sheet_names[2], skiprows=14)
df1.columns = [chr(65+i) for i in xrange(len(df1.columns))]
df2.columns = df1.columns
df3.columns = df1.columns
每个学校的唯一id位于三个数据框中的“D”列中。我想制作一个新的dataframe,它有两列。第一个是来自df1、df2、df3的列“G”的和,第二个是来自df1、df2、df3的列“K”的和。换句话说,我认为我需要以下步骤

  • 筛选所有三个数据帧中实际存在唯一列“D”ID的行。如果学校没有出现在所有的三张纸上,那么我就放弃它
  • 对于剩余的每一行(学校),将三个数据框中“G”列中的值相加
  • 对列“K”执行相同的操作
  • 我对熊猫还不熟悉,但我该怎么做呢?不知何故,在步骤2和3中必须使用唯一ID,以确保添加的值对应于同一学校


    尝试解决方案

    df1 = df1.set_index('D')
    df2 = df2.set_index('D')
    df3 = df3.set_index('D')
    df1['SumK']= df1['K'] +  df2['K'] + df3['K']
    df1['SumG']= df1['G'] +  df2['G'] + df3['G']
    

    连接数据帧后,您可以使用
    groupby
    count
    获取所有三个数据帧中存在的“D”值列表,因为每个数据帧中只有一个值。然后,您可以使用它来过滤连接的数据帧,以对需要的任何列求和,例如:

    df = pd.concat([df1, df2, df3])
    criteria = df.D.isin((df.groupby('D').count() == 3).index)
    df[criteria].groupby('D')[['G', 'K']].sum()
    

    我添加了一个尝试的解决方案。我想我现在只需要过滤掉NaN行。