比较两个数据帧列并输出第三个
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较两个数据帧列并输出第三个相关的知识,希望对你有一定的参考价值。
如果这已经被覆盖我提前道歉,我找不到任何类似的东西。这是我的第一份编程工作(我以前是软件质量保证),而且我一直在打破这个问题。
我有2个数据帧,一个非常大[df2](1460万行),我正在以块的形式迭代它。我尝试比较每个数据帧中同名的列,如果它们相等,我想输出较大帧的辅助列。
即
if df1['tag'] == df2['tag']:
df1['new column'] = df2['plate']
我试图合并,但这没有输出我的预期。
df3 = pd.merge(df1, df2, on='tag', how='left')
我希望我能解释这个问题。
[编辑:]我也相信我应该提到df2和df1都有很多额外的列我不想与之交互/改变。是否可以仅比较两个数据帧的单个列,并输出第三个附加列?
你可以尝试inner
合并。首先,您可以使用inner merge
df1
df2
,然后您将获得仅适用于常见行的plates
,您可以根据需要重命名新的df1's
列
df1 = df1.merge(df2, on="tag", how = 'inner')
df1['new column'] = df1['plate']
del df1['plate']
我希望这有效。
正如smci所说,这是使用连接/合并的最佳时机。如果你想保留df1
,左边的连接就是你想要的。所以你走在正确的道路上:
df1 = pd.merge(df1['tag'],
df2['tag', 'plate'],
on='tag', how='left')
df1.rename({'plate': 'new column'}, axis='columns')
这只会比较每个数据帧中的tag
列,因此其他列无关紧要。它将从plate
中引入df2
列,然后将其重命名为您想要命名的新列。
这完全是join/merge
的一个案例。你想把df2放在左边,因为它更小。
df2.join(df1, on='tag', ...)
你只是误解了你想做的type of join/merge:
如何:{'左','右','外','内'},默认:'左'
'how'='left'join将为LHS df2的所有行创建一个(不需要的)条目。这不是你想要的(如果df2包含df1中没有看到的其他标记值,你也会得到它们的条目)。
'how'='inner'将在'on'='tag'字段上形成df2和df1的交集。即,您只能根据df2获取df1包含有效标记值的条目。
所以:
df3 = df2.join(df1, on='tag', how='inner')
# then reference df3['plate']
或者如果您只想要df3(或其他一些列)中的'plate'列,您可以直接执行:
df2.join(df1, on='tag', how='inner') ['plate']
以上是关于比较两个数据帧列并输出第三个的主要内容,如果未能解决你的问题,请参考以下文章
Python:比较两个excel表之间的列字符串并找到匹配的列并写入另一个数据框
片段(Java) | 机试题+算法思路+考点+代码解析 2023