如何使用公共密钥对来自三个不同数据帧的列进行求和

时间:2014-02-25 12:32:16

标签: 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.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”列中。我想创建一个有两列的新数据框。第一个是来自df1,df2,df3的列'G'的总和,第二个是来自df1,df2,df3的列'K'的总和。换句话说,我认为我需要以下步骤。

  1. 过滤所有三个数据框中实际存在唯一列“D”ID的行。如果学校没有出现在所有三张纸上,那么我就丢弃它。
  2. 对于每个剩余的行(学校),将三个数据框中的“G”列中的值相加。
  3. 对列'K'执行相同操作。
  4. 我是熊猫新手,但我该怎么做?不知何故,必须在步骤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']
    

1 个答案:

答案 0 :(得分:4)

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

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