如何基于Pandas DataFrame指定列条件按随机均等分布新增列
实现方案
首先修正你初始构造代码的变量名大小写错误(原代码中List_colors首字母大写和变量定义不一致),完整实现方案如下:
完整代码
import pandas as pd import random # 构造初始DataFrame list_colors = [['black'], ["yellow"]]*4 df_colors = pd.DataFrame(list_colors, columns = ['color']) # 定义color到color_2可选值的映射关系,可按需扩展 color_mapping = { "black": ["red", "green"], "yellow": ["purple", "pink"] } # 按color分组赋值 def generate_color2(group): options = color_mapping[group.name] # 计算重复次数保证各可选值数量均等 repeat_cnt = len(group) // len(options) color2_values = options * repeat_cnt # 随机打乱保证每次运行结果不同 random.shuffle(color2_values) return pd.Series(color2_values, index=group.index) df_colors["color_2"] = df_colors.groupby("color", group_keys=False).apply(generate_color2) # 查看输出结果 print(df_colors)
方案说明
- 满足随机要求:每次运行
random.shuffle都会重新打乱赋值顺序,输出结果不固定 - 满足等数量分配要求:通过等倍重复可选值列表的方式,严格保证同color下每个color_2可选值的分配数量完全一致
- 扩展性强:如果后续新增color取值、或者调整可选值列表,仅需要修改
color_mapping即可,只要单color的行数是可选值数量的整数倍就可以正常运行
内容的提问来源于stack exchange,提问作者giorgio-p
相关产品推荐
相关产品推荐

