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

两个DataFrame无重复随机抽样:为DF1唯一ID分配随机地址

问题背景与给定数据

你需要为DF1中的每个唯一ID随机分配地址,先把两个DataFrame整理成清晰的表格:

DF1(唯一ID与对应城市)

UNIQUE_IDCity
k5WjB6MQa5CruSkopje
k4Yq5QqXwoL4eSkopje
S9jGzT5qMZLyFSkopje
mhSHSuxic58SfSkopje
MU7eys8NKXQogSkopje
GUBe1scNsXQogBitola
S9jGzT5qMZLyFKumanovo

DF2(城市与对应地址)

ADDRESSCity
РАТКО МИТРОВИЌ 5 БР.29-ДРАЧЕВОSkopje
УЛ. МЕТОДИЈА ПАТЧЕВ БР.17АSkopje
УЛ ДРАЧЕВСКА 123Skopje
УЛ.ДОМАЗЕТОВСКА БР. 24Skopje
ДРАЧЕВО УЛ. ЈАНКО МИШИЌ БР. 3Skopje
УЛ. ПАРТИЗАНСКИ ПАТ 2 БР. 1Skopje

虽然你提到的分配要求不完整,但最合理的逻辑应该是按城市匹配,为同城市的ID随机分配对应城市的地址,我基于这个逻辑给你实现解决方案:

解决方案(基于Pandas)

下面是可直接运行的代码,同时会处理DF2中没有对应城市地址的情况(比如Bitola和Kumanovo):

import pandas as pd
import numpy as np

# 初始化两个DataFrame
df1 = pd.DataFrame({
    'UNIQUE_ID': ['k5WjB6MQa5Cru', 'k4Yq5QqXwoL4e', 'S9jGzT5qMZLyF', 'mhSHSuxic58Sf', 'MU7eys8NKXQog', 'GUBe1scNsXQog', 'S9jGzT5qMZLyF'],
    'City': ['Skopje', 'Skopje', 'Skopje', 'Skopje', 'Skopje', 'Bitola', 'Kumanovo']
})

df2 = pd.DataFrame({
    'ADDRESS': ['РАТКО МИТРОВИЌ 5 БР.29-ДРАЧЕВО', 'УЛ. МЕТОДИЈА ПАТЧЕВ БР.17А', 'УЛ ДРАЧЕВСКА 123', 'УЛ.ДОМАЗЕТОВСКА БР. 24', 'ДРАЧЕВО УЛ. ЈАНКО МИШИЌ БР. 3', 'УЛ. ПАРТИЗАНСКИ ПАТ 2 БР. 1'],
    'City': ['Skopje']*6
})

# 按城市分组,把每个城市的地址存为字典映射
city_address_map = df2.groupby('City')['ADDRESS'].apply(list).to_dict()

# 定义随机分配地址的函数
def assign_random_address(city):
    addresses = city_address_map.get(city, [])
    if addresses:
        return np.random.choice(addresses)
    # 没有对应城市的地址时返回提示文本
    return f"⚠️ No address available for {city}"

# 为DF1添加分配后的地址列
df1['ASSIGNED_ADDRESS'] = df1['City'].apply(assign_random_address)

# 查看最终结果
print(df1)

代码说明

  1. city_address_map:把DF2中每个城市对应的地址整理成字典,方便快速按城市查找地址列表
  2. assign_random_address:针对每个城市,随机挑选一个地址;如果没有对应城市的地址,返回友好提示
  3. 最后通过apply方法批量为DF1的每一行分配地址,生成新的ASSIGNED_ADDRESS列

示例输出(随机分配,每次结果略有不同)

UNIQUE_IDCityASSIGNED_ADDRESS
k5WjB6MQa5CruSkopjeУЛ.ДОМАЗЕТОВСКА БР. 24
k4Yq5QqXwoL4eSkopjeДРАЧЕВО УЛ. ЈАНКО МИШИЌ БР. 3
S9jGzT5qMZLyFSkopjeУЛ ДРАЧЕВСКА 123
mhSHSuxic58SfSkopjeРАТКО МИТРОВИЌ 5 БР.29-ДРАЧЕВО
MU7eys8NKXQogSkopjeУЛ. ПАРТИЗАНСКИ ПАТ 2 БР. 1
GUBe1scNsXQogBitola⚠️ No address available for Bitola
S9jGzT5qMZLyFKumanovo⚠️ No address available for Kumanovo

如果你的实际需求还有其他约束(比如地址不能重复分配、ID和地址有特定关联规则),可以补充说明,我再调整代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:59:19