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

如何用Python和Faker根据前列值条件填充DataFrame列数据

解决根据PC类型生成对应操作系统假数据的问题

你需要让操作系统列的生成依赖于PC Type列的值,核心思路是先确定PC Type,再根据它的值分支生成对应的操作系统状态。以下是修改后的代码,完全符合你的需求:

from faker import Faker
import pandas as pd
import random

pc_type = ['PC', 'Apple']
fake = Faker()

def create_data(x):
    project_data = {}
    for i in range(x):
        project_data[i] = {}
        project_data[i]['Name'] = fake.name()
        # 先生成PC类型
        current_pc_type = fake.random_element(pc_type)
        project_data[i]['PC Type'] = current_pc_type
        
        # 根据PC类型生成对应的操作系统
        if current_pc_type == 'Apple':
            project_data[i]['With Windows 10'] = False
            project_data[i]['With Windows 11'] = False
            project_data[i]['With MacOS'] = True
        else:
            # PC类型下,50%概率选Win10,50%选Win11
            win_version = random.choice(['Win10', 'Win11'])
            project_data[i]['With Windows 10'] = (win_version == 'Win10')
            project_data[i]['With Windows 11'] = (win_version == 'Win11')
            project_data[i]['With MacOS'] = False

    return project_data

df = pd.DataFrame(create_data(10)).transpose()
print(df)

关键逻辑说明

  1. 先确定PC类型:先生成current_pc_type并赋值到字典中,后续的操作系统列都基于这个值判断
  2. Apple设备的处理:直接固定With MacOS为True,其余两个Windows列设为False
  3. PC设备的处理:用random.choice从['Win10', 'Win11']中随机选一个,选到哪个就把对应的列设为True,另一个Windows列和MacOS列设为False,保证50%的概率分配

如果你想简化成只保留一个Operating System列(直接显示系统名称而不是布尔值),也可以这样修改,更直观:

from faker import Faker
import pandas as pd
import random

pc_type = ['PC', 'Apple']
fake = Faker()

def create_data(x):
    project_data = {}
    for i in range(x):
        project_data[i] = {}
        project_data[i]['Name'] = fake.name()
        current_pc_type = fake.random_element(pc_type)
        project_data[i]['PC Type'] = current_pc_type
        
        if current_pc_type == 'Apple':
            project_data[i]['Operating System'] = 'MacOS'
        else:
            project_data[i]['Operating System'] = random.choice(['Windows 10', 'Windows 11'])

    return project_data

df = pd.DataFrame(create_data(10)).transpose()
print(df)

这种方式更简洁,也更符合实际数据存储的习惯,你可以根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:06:25