如何为Pandas DataFrame生成符合指定随机条件的col3列?
解决方案
我们可以通过按col1分组,为每个组生成符合要求的随机值并打乱顺序来实现需求。具体逻辑如下:
- 每个
col1分组包含14条记录,需为其中一半保留col2的原值,另一半使用原值的反转(0变1,1变0) - 将生成的混合列表随机打乱,确保分配的随机性
- 将处理后的结果赋值给新列
col3
完整代码如下:
import pandas as pd import numpy as np # 创建原始DataFrame ds = {'col1' : [1]*14 + [2]*14, 'col2' : [0]*14 + [1]*14} data = pd.DataFrame(data=ds) # 定义生成col3的分组处理函数 def generate_col3(group): group_size = len(group) original_val = group['col2'].iloc[0] # 生成包含一半原值和一半反转值的列表 col3_values = [original_val]*(group_size//2) + [1 - original_val]*(group_size//2) # 随机打乱列表顺序 np.random.shuffle(col3_values) group['col3'] = col3_values return group # 应用函数到每个分组 data = data.groupby('col1').apply(generate_col3) # 输出结果查看 print(data)
执行后col3列会满足要求:
- 当
col1=1时,7条记录为0,7条为1,随机分布 - 当
col1=2时,7条记录为1,7条为0,随机分布
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

