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

如何按比例调整指定数据列:实现数据集的要求取值

实现需求的函数方法

原始数据集:

COMPANYDATABREACHCYBERBACKGROUND
A12
B02
C01
D02
E11
F12
G02
H02
I02
J02

需求:针对DATABREACH列取值为1的案例,将其中40%的案例的CYBERBACKGROUND列设为2。

Python Pandas 实现方法

核心思路:筛选目标行→计算需修改的行数→随机选行修改→合并回原数据

import pandas as pd
import numpy as np

# 构造原始数据(实际使用时可替换为读取你的数据源)
data = pd.DataFrame({
    'COMPANY': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
    'DATABREACH': [1, 0, 0, 0, 1, 1, 0, 0, 0, 0],
    'CYBERBACKGROUND': [2, 2, 1, 2, 1, 2, 2, 2, 2, 2]
})

# 1. 筛选DATABREACH=1的子集
breach_subset = data[data['DATABREACH'] == 1].copy()
# 2. 计算需要修改的行数(按40%比例取整)
modify_count = int(len(breach_subset) * 0.4)
# 3. 随机挑选指定数量的行索引
selected_indices = np.random.choice(breach_subset.index, size=modify_count, replace=False)
# 4. 将选中行的CYBERBACKGROUND设为2
breach_subset.loc[selected_indices, 'CYBERBACKGROUND'] = 2
# 5. 把修改后的子集更新回原数据
data.update(breach_subset)

# 输出结果
print(data)

R Dplyr 实现方法

核心思路:分组处理→随机排序后选取前40%行修改值

library(dplyr)

# 构造原始数据(实际使用时可替换为读取你的数据源)
data <- data.frame(
  COMPANY = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"),
  DATABREACH = c(1, 0, 0, 0, 1, 1, 0, 0, 0, 0),
  CYBERBACKGROUND = c(2, 2, 1, 2, 1, 2, 2, 2, 2, 2)
)

# 处理数据
processed_data <- data %>%
  # 按DATABREACH分组
  group_by(DATABREACH) %>%
  # 随机打乱行顺序,确保选取的是随机样本
  sample_frac(1) %>%
  # 对DATABREACH=1的组,将前40%行的CYBERBACKGROUND设为2,其余保持原样
  mutate(
    CYBERBACKGROUND = ifelse(
      DATABREACH == 1 & row_number() <= n() * 0.4,
      2,
      CYBERBACKGROUND
    )
  ) %>%
  ungroup()

# 输出结果
print(processed_data)

说明:如果需要更精确的比例(比如非整数时向上/向下取整),可以调整modify_count的计算方式(比如用round()或math.ceil());两种方法都保证了修改的是随机选取的40%目标行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:10:16