我几天前在这里,我将尝试更好地改写我的问题。 我正在使用Python和Pandas并尝试执行某项任务。我正在使用两个数据帧,他们都有学生ID。如果第2列包含第1列中的学生ID,我希望能够将新数据框合并在一起。 有人知道怎么做这个吗?我尝试研究和使用pd.melt(),pd.merge()和join。但我不相信它不能完成我的工作。
df1列中的示例“student”,id为1234.如果df2具有相同的学生ID,请将其放入数据框中。这样,我将一个学生的所有成绩放在一个df中,并且他们与另一组学生的成绩不同。
除非您真正找到答案,否则请不要将其标记为重复,因为我一直在寻找答案的日子。
答案 0 :(得分:0)
试试这个:
df1 = pd.DataFrame({"Assignment": ["A","B"], "Grade": ["85", "87"], "Student": ["112345","123234"], "Date": ["8-23-17","3-21-17"]}, columns=["Assignment","Grade","Student","Date"], index=range(2))
df2 = pd.DataFrame({"Assignment": ["B", "F"], "Grade": ["75", "22"], "Student": ["112345","123213"], "Date": ["7-28-17", "4-12-17"]}, columns=["Assignment","Grade","Student","Date"], index=range(2))
print(df1)
// Assignment Grade Student Date
// 0 A 85 112345 8-23-17
// 1 B 87 123234 3-21-17
print(df2)
// Assignment Grade Student Date
// 0 B 75 112345 7-28-17
// 1 F 22 123213 4-12-17
现在提取重复项:
df3 = pd.DataFrame()
for index1, value1 in df1.loc[:,['Student']].stack().iteritems():
notYetAddedFirst = True
for index2, value2 in df2.loc[:,['Student']].stack().iteritems():
if value1 == value2:
if notYetAddedFirst:
df3 = pd.concat([df3,df1.loc[index1[0]:index1[0]]]).reset_index().drop(['index'], axis=1)
notYetAddedFirst = False
df3 = pd.concat([df3,df2.iloc[index2[0]:index2[0]+1]]).reset_index().drop(['index'], axis=1)
print(df3)
// Assignment Grade Student Date
// 0 A 85 112345 8-23-17
// 1 B 75 112345 7-28-17