如果df中的值包含在两个相同的列名称中,则创建新的df

时间:2017-12-19 00:01:57

标签: python pandas dataframe

我几天前在这里,我将尝试更好地改写我的问题。 我正在使用Python和Pandas并尝试执行某项任务。我正在使用两个数据帧,他们都有学生ID。如果第2列包含第1列中的学生ID,我希望能够将新数据框合并在一起。 有人知道怎么做这个吗?我尝试研究和使用pd.melt(),pd.merge()和join。但我不相信它不能完成我的工作。

df1列中的示例“student”,id为1234.如果df2具有相同的学生ID,请将其放入数据框中。这样,我将一个学生的所有成绩放在一个df中,并且他们与另一组学生的成绩不同。

除非您真正找到答案,否则请不要将其标记为重复,因为我一直在寻找答案的日子。

1 个答案:

答案 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