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

如何从另一DataFrame随机抽取关联列值添加到目标DataFrame

实现方法

核心原则:随机抽取时必须以ID-Value的完整行为单位做随机,禁止拆分ID、Value两列分别随机,否则会破坏两列的原有对应关系。
以下是两种最常用场景的可直接运行的实现代码:

  • 关系型数据库(以MySQL为例,其他数据库仅需调整随机函数即可适配)
-- 以下为测试数据构造段,实际使用时替换为自身业务表即可
WITH year_table AS (
    SELECT 1 AS Year UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
),
id_value_table AS (
    SELECT 1 AS ID, 10 AS Value UNION ALL
    SELECT 2, 50 UNION ALL SELECT 3, 25 UNION ALL SELECT 4, 20 UNION ALL SELECT 5, 40
)
-- 核心匹配逻辑
SELECT
    y.Year,
    iv.ID,
    iv.Value
FROM year_table y
INNER JOIN (
    SELECT 
        ID,
        Value,
        -- 给每个ID-Value对生成随机序号
        ROW_NUMBER() OVER(ORDER BY RAND()) AS rand_rank
    FROM id_value_table
) iv 
-- 给每个Year行随机匹配1组完整的ID-Value对
ON iv.rand_rank = 1 + FLOOR(RAND() * (SELECT COUNT(*) FROM id_value_table));
  • Python Pandas 数据分析场景
import pandas as pd
# 构造测试数据,实际使用时替换为读取自身表的逻辑即可
year_df = pd.DataFrame({"Year": [1, 2, 3, 4]})
id_value_df = pd.DataFrame({
    "ID": [1, 2, 3, 4, 5],
    "Value": [10, 50, 25, 20, 40]
})
# 核心逻辑:按行随机抽取与Year行数等量的ID-Value记录,直接横向拼接保证映射关系不错乱
result_df = pd.concat(
    [
        year_df.reset_index(drop=True),
        # 如需禁止重复抽取同一组ID-Value,将replace参数改为False即可(需保证ID-Value表行数≥Year表行数)
        id_value_df.sample(n=len(year_df), replace=True).reset_index(drop=True)
    ],
    axis=1
)

运行后即可得到包含Year、ID、Value三列的结果,每一行Year对应一组绑定关系正确的随机ID-Value对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:33:20