如何用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)
关键逻辑说明
- 先确定PC类型:先生成
current_pc_type并赋值到字典中,后续的操作系统列都基于这个值判断 - Apple设备的处理:直接固定
With MacOS为True,其余两个Windows列设为False - 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
相关产品推荐
相关产品推荐

