代码之家  ›  专栏  ›  技术社区  ›  Simd

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

  •  3
  • Simd  · 技术社区  · 12 年前

    我正在阅读一份关于学校的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、df3、df2的列“K”的和。换句话说,我认为我需要以下步骤。

    1. 筛选所有三个数据帧中实际存在唯一列“D”ID的行。如果学校没有出现在所有三张纸上,那么我就放弃它。
    2. 对于剩余的每一行(学校),将三个数据帧中列“G”中的值相加。
    3. 对列“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']
    
    1 回复  |  直到 12 年前
        1
  •  6
  •   Matti John    12 年前

    连接数据帧后,可以使用 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()