我正在阅读有关学校的 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
Run Code Online (Sandbox Code Playgroud)
每所学校的唯一 ID 位于三个数据帧中的每一个的“D”列中。我想制作一个有两列的新数据框。第一个是来自 df1、df2、df3 的“G”列的总和,第二个是来自 df1、df2、df3 的“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']
Run Code Online (Sandbox Code Playgroud)
连接数据帧后,您可以使用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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |