python - 如何使用公共(public)键对来自三个不同数据帧的列求和

标签 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”列执行相同操作。

我是 pandas 的新手,但我应该怎么做呢?不知何故,必须在第 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']

最佳答案

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

关于python - 如何使用公共(public)键对来自三个不同数据帧的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22014330/

相关文章:

python - 从 pandas、python 中的列表生成多个 csv 文件

python - 如果用户在Python中输入相同的字符串两次,如何打印特定的消息?

python - 使用 xlrd 引擎在 xls 文件上调用 pands read_excel 时出现 AssertionError

python - 如何在 Pandas 中将两列合并在一起

python - 使用具有空列表属性的 pandas.io.json.json_normalize()

python - 从具有列表元素的系列创建堆叠的 Pandas 系列

python - 如何快速检查域是否存在?

python - 无法获取与 Neo4j 数据库的连接

python - 如果 jinja 标记是字符串格式,我如何在 django 和 jinja2 中使用它?

Python 箭头添加小时/分钟/等 vs 替换