根据另外两列中的值,用另一个数据帧中的值填充一个数据帧中的新列?(Python/Pandas)

2024-10-05 17:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要向一个dataframe添加一个列,并用另一个dataframe中的值填充它,但是我没有在它们之间共享的惟一ID、键或索引。它们有两个共同的标识符,使得它们之间的每一行都是唯一的,我想尝试在这两个列上进行匹配。在

这里有一个例子。。。在

Student ID  Test Day        Student ID  Test Day    Grade
E0304003    Quiz 1      E0304003    Quiz 1  A
E3305002    Quiz 1      E0303003    Test 2  A
E0303002    Test 1      E0304005    Quiz 2  D
E0304004    Quiz 1      E3306001    Test 1  C
E0301001    Quiz 1      E0301001    Quiz 1  A
E0307002    Test 2      E0307002    Test 2  C
E0303003    Test 2      E0308002    Quiz 2  A
E0304005    Quiz 2      E0301002    Test 2  C
E3306001    Test 1      E3305002    Quiz 1  C
E0308002    Quiz 2      E0303002    Test 1  F
E0301002    Test 2      E0304004    Quiz 1  C

我想在第一个集合中创建第三列,它也是Grade,并且包含与另一个dataframe中的学生ID和测试日相匹配的行的值。在

您可以看到每个集合中的列顺序不匹配,并且在实际数据中,会缺少值,所以我需要这是动态的;这并不像排序然后匹配那么简单。在

我能做点什么吗

^{pr2}$

Tags: testiddataframequizstudentgradedaye0304003
1条回答
网友
1楼 · 发布于 2024-10-05 17:29:09

^{}与left join一起使用,如果某些值与get NaNs不匹配,则用^{}替换:

df = pd.merge(df_one, df_two, on=['Student ID','Test Day'], how='left')
df['Grade'] = df['Grade'].fillna('Unknown')
print (df)

   Student ID Test Day Grade
0    E0304003   Quiz 1     A
1    E3305002   Quiz 1     C
2    E0303002   Test 1     F
3    E0304004   Quiz 1     C
4    E0301001   Quiz 1     A
5    E0307002   Test 2     C
6    E0303003   Test 2     A
7    E0304005   Quiz 2     D
8    E3306001   Test 1     C
9    E0308002   Quiz 2     A
10   E0301002   Test 2     C

相关问题 更多 >