Python 2.7 使用熊猫模块创建成绩册

Python 2.7 使用熊猫模块创建成绩册,python-2.7,pandas,Python 2.7,Pandas,因此,我最近开始教授一门课程,并希望使用python和pandas模块处理我的成绩。在这门课上,学生们分组作业,每桌交一份作业。我有一个所有学生的文件,格式如下 Name, Email, Table "John Doe", jdoe@school.edu, 3 "Jane Doe", jane@gmail.com, 5 . . . 还有一个文件,上面写着每个表格的作业成绩 Table, worksheet, another assignment, etc 1, 8, 15, 4 2, 9, 2

因此,我最近开始教授一门课程,并希望使用python和pandas模块处理我的成绩。在这门课上,学生们分组作业,每桌交一份作业。我有一个所有学生的文件,格式如下

Name, Email, Table
"John Doe", jdoe@school.edu, 3
"Jane Doe", jane@gmail.com, 5
.
.
.
还有一个文件,上面写着每个表格的作业成绩

Table, worksheet, another assignment, etc
1, 8, 15, 4
2, 9, 23, 5
3, 3, 20, 7
.
.
.
我想做的是根据每个学生的表号为他们分配适当的分数。这就是我所做的

import pandas as pd

t_data = pd.read_csv('table_grades.csv')
roster = pd.read_csv('roster.csv')

for i in range(1, len(t_data.columns)):
    x = []
    for j in range(len(roster)):
        for k in range(len(t_data)): 
            if roster.Table.values[j] == k+1:
                x.append(t_data[t_data.columns.values[i]][k])
    roster[t_data.columns.values[i]] = x
这正是我想要的,但我觉得一定有更好的方法来完成这样的任务,使用熊猫。我对熊猫还不熟悉,非常感谢大家的帮助

IIUC——不幸的是,您的代码没有与您的数据一起为我运行,并且您没有给出示例输出,因此我不能确定——您正在寻找
merge
。将新学生Fred Smith添加到表3:

In [182]: roster.merge(t_data, on="Table")
Out[182]: 
         Name               Email  Table  worksheet  another assignment  etc
0    John Doe     jdoe@school.edu      3          3                  20    7
1  Fred Smith  fsmith@example.com      3          3                  20    7

[2 rows x 6 columns]
或者外部合并,以便更容易发现丢失/未对齐的数据:

In [183]: roster.merge(t_data, on="Table", how="outer")
Out[183]: 
         Name               Email  Table  worksheet  another assignment  etc
0    John Doe     jdoe@school.edu      3          3                  20    7
1  Fred Smith  fsmith@example.com      3          3                  20    7
2    Jane Doe      jane@gmail.com      5        NaN                 NaN  NaN
3         NaN                 NaN      1          8                  15    4
4         NaN                 NaN      2          9                  23    5

[5 rows x 6 columns]

我会这样做

import pandas as pd
from StringIO import StringIO

roster = pd.read_csv(\
    StringIO("""Name,Email,Table
                'John Doe', jdoe@school.edu, 1
                'Jane Doe', jane@gmail.com, 3
                'Jack Doe', jack@gmail.com, 2"""))

t_data = pd.read_csv(\
    StringIO("""Table,worksheet,another assignment,etc
                1, 8, 15, 4
                2, 9, 23, 5
                3, 3, 20, 7"""))

roster=roster.set_index('Table')
res = pd.concat((roster.loc[t_data.Table].set_index(t_data.index), t_data), axis=1)
结果是

                         Name             Email  Table  worksheet  another assignment  etc
0                  'John Doe'   jdoe@school.edu      1          8                  15    4
1                  'Jack Doe'    jack@gmail.com      2          9                  23    5
2                  'Jane Doe'    jane@gmail.com      3          3                  20    7