[英]How do I iterate through two dataframes of different sizes?
如果目标是迭代一个或多个DataFrame
,那么显式for
循环通常是错误的举动。 在这种情况下,因为你试图
确定与我的小数据帧匹配的大数据帧中的“名称”和“值”,
您正在寻找的操作是pd.merge
或pd.DataFrame.join
,它们在“ pd.DataFrame.join
”进行比较并返回匹配信息。 因此,假设您有 2 个DataFrame
,它们被称为large
和small
。 然后
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)
通过在large
和small
( 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
上匹配small
的large
行(通过值'left_only'
)以及在Name
和Value
上匹配的行; 后者具有值both
。 最后一步是将both
和left_only
更改为1
和0
,如您所指定。
现在,左连接返回了它所做的,因为小DataFrame
中的两个Name
值都存在于large
DataFrame
所以large
和small
的左连接返回了整个large
DataFrame
。 如果不是这种情况,会有pd.NaN
从产生的值pd.merge
,你将不得不使用一些更多的技巧来获得不错的布尔(整数)列显示什么匹配,什么也没有。 哈。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.