繁体   English   中英

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

[英]How do I iterate through two dataframes of different sizes?

具体来说,我想遍历两个数据帧,一个大,一个小。

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

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

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

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

大数据框:

在此处输入图片说明

小数据框:

Name     Value
SF       12.84
TH      -49.45

如果目标是迭代一个或多个DataFrame ,那么显式for循环通常是错误的举动。 在这种情况下,因为你试图

确定与我的小数据帧匹配的大数据帧中的“名称”和“值”,

您正在寻找的操作是pd.mergepd.DataFrame.join ,它们在“ pd.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)

通过在largesmall ( how='left' ) 之间进行左连接, pd.merge返回包含('Name', 'Value')元组上的small匹配项的large行。 然后,大部分繁重的工作由indicator关键字完成,引用pd.merge版文档:

如果为 True,则向输出 DataFrame 添加一列名为“_merge”的列,其中包含有关每行源的信息。 信息列是 Categorical 类型,对于合并键仅出现在“左”数据帧中的观察值采用“left_only”值,对于合并键仅出现在“右”数据帧中的观察值采用“right_only”值,如果在两者中都可以找到观察的合并键。

因此, new_large是原始的large DataFrame带有一个名为_merge的新列,其中的条目对应于仅在Name上匹配smalllarge行(通过值'left_only' )以及在NameValue上匹配的行; 后者具有值both 最后一步是将bothleft_only更改为10 ,如您所指定。

现在,左连接返回了它所做的,因为小DataFrame中的两个Name值都存在于large DataFrame所以largesmall的左连接返回了整个large DataFrame 如果不是这种情况,会有pd.NaN从产生的值pd.merge ,你将不得不使用一些更多的技巧来获得不错的布尔(整数)列显示什么匹配,什么也没有。 哈。

暂无
暂无

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

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