python - 如何将一个数据帧中某些列的值与另一个数据帧中同一组列的值进行比较?
问题描述
我有三个数据框df1、df2和df3,定义如下
df1 =
A B C
0 1 a a1
1 2 b b2
2 3 c c3
3 4 d d4
4 5 e e5
5 6 f f6
df2 =
A B C
0 1 a X
1 2 b Y
2 3 c Z
df3 =
A B C
3 4 d P
4 5 e Q
5 6 f R
我已经定义了一个主键列表PK = ["A","B"]
。
现在,我采用第四个数据帧 df4 as df4 = df1.sample(n=2)
,它给出了类似
df4 =
A B C
4 5 e e5
1 2 b b2
现在,我想从 df2 和 df1 中选择与 df4 的主键值匹配的行。例如,在这种情况下,我需要从 df3 获取 index = 4 的行,从 df2 获取 index = 1 的行。
如果可能的话,我需要如下获取数据框:
df =
A B C A(df2) B(df2) C(df2) A(df3) B(df3) C(df3)
4 5 e e5 5 e Q
1 2 b b2 2 b Y
关于如何解决这个问题的任何想法都会非常有帮助。
解决方案
使用两个连续的DataFrame.merge
操作以及DataFrame.add_suffix
在正确left
的数据帧上使用来合并数据帧df4, df2, df3
,最后使用字符串Series.fillna
替换缺失值:empty
df = (
df4.merge(df2.add_suffix('(df2)'), left_on=['A', 'B'], right_on=['A(df2)', 'B(df2)'], how='left')
.merge(df3.add_suffix('(df3)'), left_on=['A', 'B'], right_on=['A(df3)', 'B(df3)'], how='left')
.fillna('')
)
结果:
# print(df)
A B C A(df2) B(df2) C(df2) A(df3) B(df3) C(df3)
0 5 e e5 5 e Q
1 2 b b2 2 b Y
推荐阅读
- javascript - 如何将 JS 生成的按钮附加到 div 而不是正文
- xslt-3.0 - XSLT 3:空节点集的 xsl:analyze-string 不执行 xsl:non-matching-substring
- reactjs - 如何使用 Protractor 为 ReactJS 应用程序测试和编写测试用例?
- flutter - 我想在用户第一次在应用程序中唱歌时设置默认主题,而无需“选择”按钮或复选框
- reactjs - TS2322: Type 'NotRequiredArraySchema
' is not assignable to type 'Ref | Schema I'm solving this problem. I'm using yup for formik validation. Code
- python - How to define a sentence as ,Starting with "uppercase letter" end ending with ".", in a txt file
- android - Created file disappears when Android app is killed programatically
- javascript - "classList.toggle" doesn't apply styles, but it gets applied manually
- django - Configuring Gunicorn with nginx - nginx displaying 500 Internal Server Error when running on port 8000
- c# - Is it possible to publish a program in the microsoft store that depends on the installation of another?