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

如何使用Pandas合并两个城市住房成本数据DataFrame?

使用Pandas合并城市住房成本DataFrame

下面针对不同场景给出具体的合并方案,直接上手就能用:

1. 基础键匹配合并(最常用场景)

假设你有两份数据,一份存城市租金、一份存城市房价,先看示例数据:

import pandas as pd

# 表1:城市 + 月租金数据
df_rent = pd.DataFrame({
    '城市': ['北京', '上海', '广州', '深圳'],
    '月租金(元/㎡)': [85, 80, 55, 75]
})

# 表2:城市 + 平均房价数据
df_price = pd.DataFrame({
    '城市': ['北京', '上海', '深圳', '杭州'],
    '平均房价(万元/㎡)': [6.5, 6.2, 5.8, 3.8]
})

内连接(仅保留双方都有的城市)

只保留两个表中都存在的城市数据,适合你只关注有完整住房成本数据的城市:

merged_inner = pd.merge(df_rent, df_price, on='城市', how='inner')
print(merged_inner)

输出会保留北京、上海、深圳,广州(只有租金)和杭州(只有房价)会被过滤。

全外连接(保留所有城市,缺失值补NaN)

不管城市在哪个表,全部保留,缺失的字段用NaN填充:

merged_outer = pd.merge(df_rent, df_price, on='城市', how='outer')
print(merged_outer)

左/右连接(以某一张表为基准)

  • 左连接:以左表(df_rent)的城市为基准,匹配右表数据,右表没有的补NaN
  • 右连接:以右表(df_price)的城市为基准,匹配左表数据,左表没有的补NaN
# 左连接
merged_left = pd.merge(df_rent, df_price, on='城市', how='left')
# 右连接
merged_right = pd.merge(df_rent, df_price, on='城市', how='right')

2. 处理键名不一致的情况

如果两个表的城市列名不同(比如一个叫城市名称,一个叫City),用left_on和right_on分别指定:

# 修改列名模拟不同键名场景
df_rent_rename = df_rent.rename(columns={'城市': '城市名称'})
df_price_rename = df_price.rename(columns={'城市': 'City'})

# 按不同键名合并
merged_diff_keys = pd.merge(df_rent_rename, df_price_rename, left_on='城市名称', right_on='City', how='inner')
# 可选:删除重复的键列
merged_diff_keys = merged_diff_keys.drop('City', axis=1)

3. 多键合并(比如城市+区域)

如果需要按多个维度匹配(比如城市+行政区),把on参数设为列名列表即可:

# 带区域维度的示例数据
df_rent_area = pd.DataFrame({
    '城市': ['北京', '北京', '上海', '上海'],
    '区域': ['朝阳区', '海淀区', '浦东新区', '静安区'],
    '月租金(元/㎡)': [90, 85, 85, 80]
})

df_price_area = pd.DataFrame({
    '城市': ['北京', '上海', '上海', '广州'],
    '区域': ['朝阳区', '浦东新区', '黄浦区', '天河区'],
    '平均房价(万元/㎡)': [7.2, 6.5, 6.8, 4.2]
})

# 按城市+区域合并
merged_multi_keys = pd.merge(df_rent_area, df_price_area, on=['城市', '区域'], how='inner')

只有城市和区域完全匹配的行才会被保留(比如北京朝阳区、上海浦东新区)。

4. 合并后去重

如果合并后出现重复行,用drop_duplicates()快速清理:

# 模拟重复行场景
merged_with_duplicates = pd.concat([merged_inner, merged_inner.iloc[[0]]], ignore_index=True)
# 按城市列去重,保留第一行
merged_clean = merged_with_duplicates.drop_duplicates(subset=['城市'], keep='first')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:25:30