所以我最近开始教授一门课程,并希望使用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
我想要的是什么,但我觉得必须有更好的方法来使用熊猫这样做这样的任务。我是熊猫新手,感谢任何帮助。
答案 0 :(得分:1)
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]
答案 1 :(得分:0)
我会做这样的事情
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