如何使用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
相关产品推荐
相关产品推荐

