如何遍历两个大小不同的数据框?

时间:2019-07-30 17:41:31

标签: python pandas

具体来说,我想遍历两个数据框,其中一个较大,另一个较小。

最终,我想比较某个列中的值。

我试图创建一个嵌套的for循环;外循环遍历大数据框而内循环遍历小数据框,但是我遇到了困难。

我正在寻找一种方法来识别大型数据框中的“名称”和“值”与小型数据框中的匹配。

背景信息:我正在使用熊猫库。

大型数据框:

enter image description here

小数据框:

Name     Value
SF       12.84
TH      -49.45

1 个答案:

答案 0 :(得分:1)

如果目标是遍历一个或多个DataFrame,则明确的for循环通常是错误的举动。在这种情况下,因为您尝试

  

确定大型数据框中的“名称”和“值”与小型数据框中的

您要查找的操作是pd.mergepd.DataFrame.join,它们“在幕后”进行比较并返回匹配的信息。因此,假设您有2个DataFrame,它们分别称为largesmall。然后

import pandas as pd
new_large = pd.merge(left=large,
                     right=small,
                     how='left',
                     on=('Name', 'Value'),
                     indicator=True)

new_large._merge = new_large._merge.apply(lambda x: 1 if x=='both' else 0)

通过在largesmallhow='left')之间进行左联接,pd.merge返回large中包含{{1 }}在small元组上。然后,大部分繁重的工作都由('Name', 'Value')关键字完成,该关键字引用了indicator版本0.25.0文档:

  

如果为True,则使用以下命令将一列添加到输出数据框架“ _merge”中:       有关每行来源的信息。       信息列为分类类型,其值为“ left_only”       对于其合并键仅出现在“左” DataFrame中的观察,       “ right_only”用于其合并键仅出现在“ right”中的观测值       DataFrame,如果在两者中都找到观察的合并键,则为“两者”。

因此,pd.merge是原始的new_large large,其中有一个名为DataFrame的新列,其条目对应于与{ {1}}位于_merge上(按值large),并且与smallName上匹配的行;后者的值为'left_only'。最后一步是按照您的指定将NameValue更改为bothboth

现在,左联接返回了它所做的操作,因为小left_only中的两个1值都出现在0 Name中,因此左联接DataFramelarge返回了整个DataFrame large。如果不是这种情况,则small会产生large个值,您将不得不使用一些技巧来获得漂亮的布尔值(整数)列,以显示匹配的内容和不匹配的内容没错HTH。