创建新的DF如果DF中的一个列中的值包含在DF两个相同的列名中



我几天前就在这里,我将尝试更好地调用我的问题。我正在与Python和Pandas合作,并试图完成一项任务。我正在使用两个数据范围,他们都有学生ID。如果第2列包含第一列中的学生ID,我希望能够将新的数据帧合并在一起。有人知道怎么做这个吗?我尝试研究和使用pd. -melt(),pd.merge()和加入。但是我不认为这不会为我完成工作。

DF1列中的示例"学生",ID为1234。如果DF2具有相同的学生ID,请将其放在数据范围内。这样一来,我就拥有一个DF中一个特定学生的所有成绩,他们与其他学生不同。

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

尝试以下:

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

最新更新