You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效合并Airbnb的Listings与Reviews Pandas DataFrame?

高效合并Airbnb listings与reviews数据集的方法

你用嵌套iterrows()循环的方式效率极低,核心原因是:iterrows()本身就是逐行迭代的慢操作,嵌套循环的时间复杂度是O(n*m),当两个数据集各有10万行时,相当于要执行10^10次判断,完全是算力浪费。

下面是两种Pandas原生的高效实现方式,时间复杂度都是O(n+m),能轻松处理10万级别的数据:

方法一:分组聚合后合并

先对reviews数据集按房源ID分组,把对应评论聚合成列表,再和listings数据集做左连接:

# 1. 按listing_id分组,将对应reviews聚合成列表
reviews_grouped = reviews_df.groupby('listing_id')['reviews'].agg(list).reset_index()

# 2. 左连接listings_df,保留所有房源数据
listings_with_reviews = listings_df.merge(
    reviews_grouped,
    left_on='id',
    right_on='listing_id',
    how='left'
)

# 3. 无评论的房源填充空列表(可选)
listings_with_reviews['reviews'] = listings_with_reviews['reviews'].apply(
    lambda x: x if isinstance(x, list) else []
)

# 4. 清理多余的listing_id列(可选)
listings_with_reviews.drop('listing_id', axis=1, inplace=True)

方法二:字典映射快速匹配

先构建房源ID到评论列表的字典,再用map()直接匹配到listings数据集中:

# 1. 生成listing_id对应reviews列表的字典
review_map = reviews_df.groupby('listing_id')['reviews'].agg(list).to_dict()

# 2. 给listings_df添加reviews列,无评论的填充空列表
listings_df['reviews'] = listings_df['id'].map(review_map).fillna([]).tolist()

注意点

你原代码里有个小笔误:reviews_df的示例列名是reviews,但循环里写的是r_row['comments'],实际使用时要保证列名一致,否则会报错。

内容的提问来源于stack exchange,提问作者Aamir Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:40:33