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

基于字典键嵌套列表关联对象,实现Kiva数据集MPI值与区域匹配

解决Kiva贷款数据与MPI区域值关联的问题

我来帮你一步步搞定这个关联任务——核心就是处理贷款数据里多值/嵌套的Region字段,匹配到对应的MPI(多维贫困指数)值。下面用Python(以pandas为主)来实现完整流程:

1. 先加载并摸透两个数据集

第一步先把两个CSV文件读进来,看看数据结构,确认匹配的关键字段:

import pandas as pd

# 加载MPI区域-值对应表
mpi_region_df = pd.read_csv('kiva_mpi_region_locations.csv')
# 加载贷款主数据
kiva_loans_df = pd.read_csv('kiva_loans.csv')

# 先快速查看MPI数据的对应关系
print(mpi_region_df[['region', 'MPI']].head())
# 看看贷款数据里Region字段的样例,判断是多值分隔还是嵌套结构
print(kiva_loans_df['Region'].sample(10))

2. 处理多值分隔的Region字段

如果你的Region字段是用逗号、分号这类分隔符拼接的多区域(比如"Central Java, Yogyakarta"),先把它拆成单个区域的列表,再展开成单行单区域的格式:

# 假设分隔符是「逗号+空格」,根据实际数据调整
kiva_loans_df['split_regions'] = kiva_loans_df['Region'].str.split(', ')

# 把多区域的行拆成多行,每个区域单独一行,方便后续匹配
loans_exploded = kiva_loans_df.explode('split_regions', ignore_index=True)

3. 处理嵌套列表中的字典对象

如果Region字段是JSON格式的嵌套字典列表(比如[{"region_name":"X"}, {"region_name":"Y"}]),得先解析成Python对象,再提取区域名称:

import json

# 解析JSON格式的Region字段,空值处理成空列表
kiva_loans_df['region_objects'] = kiva_loans_df['Region'].apply(
    lambda x: json.loads(x) if pd.notnull(x) else []
)

# 从嵌套字典里提取区域名称(这里假设字典的键是'region_name',根据实际键名调整)
def extract_region_names(obj_list):
    return [obj['region_name'] for obj in obj_list if 'region_name' in obj]

kiva_loans_df['split_regions'] = kiva_loans_df['region_objects'].apply(extract_region_names)

# 同样展开成单行单区域
loans_exploded = kiva_loans_df.explode('split_regions', ignore_index=True)

4. 关联MPI值并整理结果

现在把展开后的贷款数据和MPI数据按区域名称关联,最后可以按贷款ID聚合结果:

# 先统一区域名称的格式,避免大小写、空格导致匹配失败
mpi_region_df['region'] = mpi_region_df['region'].str.strip().str.lower()
loans_exploded['split_regions'] = loans_exploded['split_regions'].str.strip().str.lower()

# 左连接,保留所有贷款数据,匹配对应的MPI值
merged_data = pd.merge(
    loans_exploded, 
    mpi_region_df, 
    left_on='split_regions', 
    right_on='region', 
    how='left'
)

# 按贷款ID聚合,比如取对应区域的平均MPI,或者保留所有匹配的MPI值
final_result = merged_data.groupby('id').agg(
    original_region=('Region', 'first'),
    average_mpi=('MPI', 'mean'),
    all_matched_mpis=('MPI', list)
).reset_index()

5. 处理匹配不到的情况

有些区域可能在MPI数据里找不到对应值,可以标记出来或者统计缺失情况:

# 用特定值标记缺失的MPI
merged_data['MPI'] = merged_data['MPI'].fillna('无匹配MPI数据')

# 统计有多少个区域没有对应MPI值
missing_regions_count = merged_data[merged_data['MPI'] == '无匹配MPI数据']['split_regions'].nunique()
print(f"共有{missing_regions_count}个区域未找到对应的MPI值")

关键注意点

  • 区域名称一致性:两个数据集的区域名称可能存在大小写、拼写、空格差异,一定要先统一格式(比如转小写、去首尾空格)。
  • 嵌套结构的键名:如果是嵌套字典,一定要确认存储区域名称的键(比如可能是name、region而非region_name),根据实际数据调整提取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:46:04