比较两个数据帧列并输出第三个

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

比较两个 Dataframe 列并显示 df1 中可用的结果而不是 df2 [重复]

合并两个TRUE / FALSE数据帧列,仅保留TRUE

如何使用SQL星火一个数据帧列中获取值?