繁体   English   中英

合并具有特定条件的数据帧

[英]Merging dataframes with specific condition

我有两个pandas数据帧。 第一个包含课程ID和教师ID,第二个包含课程ID,评级和备注。 请参阅下面的示例。

第一个数据帧:

df1 = pd.DataFrame({"Course ID": ["MTH101.A", "MTH102.A", "MTH101.B", "MTH203.A", "MTH123.C"], "Instructor ID": ["X01", "T08", "C02", "D03", "Q01"]})

第二个数据框:

df2 = pd.DataFrame({"Course ID": ["MTH101.A", "MTH102.X", "MTH203.A", "MTH101.B", "MTH123.Q"], "Rating": ["3.7", "4.1", "4.7", "2.9", "3.1"], "Remarks": ['B', 'A', 'A+', 'C', 'B']})

不幸的是,数据输入人员在第二个数据帧中的课程ID中犯了错误。 这样在某些情况下只有前几个字符与第一个数据帧匹配。

我希望得到一个统一的数据框,如下所示: 在此输入图像描述

在此输入图像描述

这有什么线索?

我们可以通过匹配Course ID进行合并,并附加那些没有“完全匹配”的内容:

bad1 = np.where(~df1['Course ID'].isin(df2['Course ID']))[0]
bad2 = np.where(~df2['Course ID'].isin(df1['Course ID']))[0]

r = \
df1.merge(df2) \
   .append(pd.merge(df1.loc[bad1].assign(x=df1['Course ID'].str.split('\.').str[0]),
                    df2.loc[bad2].drop('Course ID',1).assign(x=df2['Course ID'].str.split('\.').str[0]),
                    on='x') \
             .drop('x', 1))

结果:

In [44]: r
Out[44]:
  Course ID Instructor ID Rating Remarks
0  MTH101.A           X01    3.7       B
1  MTH101.B           C02    2.9       C
2  MTH203.A           D03    4.7      A+
0  MTH102.A           T08    4.1       A
1  MTH123.C           Q01    3.1       B

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM