如何在pandas dataframe中随机选取X行填充1其余行填0
Pandas DataFrame随机指定行数填充值实现方法
首先构造题目要求的示例测试数据:
import pandas as pd import numpy as np # 构造10行的测试DataFrame df = pd.DataFrame({ 'col1': ['a','b','c','d','e','f','g','h','i','j'] })
实现方法1:pandas sample抽样赋值
思路为先初始化新增列全为0,再随机抽取指定行数的索引,将对应位置的值修改为1:
# 指定需要填充为1的行数 fill_one_count = 4 # 初始化col2所有值为0 df['col2'] = 0 # 随机抽取指定行数,将对应col2的值修改为1 df.loc[df.sample(n=fill_one_count).index, 'col2'] = 1
如果需要固定随机结果方便复现,可以给sample方法添加random_state参数,例如df.sample(n=fill_one_count, random_state=42)。
实现方法2:numpy生成乱序数组直接赋值
思路为先构造包含指定数量1和0的数组,打乱顺序后直接赋值给新增列:
fill_one_count = 4 # 生成包含4个1、6个0的数组,打乱顺序后赋值给col2 df['col2'] = np.random.permutation([1]*fill_one_count + [0]*(len(df)-fill_one_count))
如果要固定随机结果,在执行上述代码前添加np.random.seed(42)即可。
两种方法均可以稳定实现需求,运行后输出df即可得到符合要求的结果。
内容的提问来源于stack exchange,提问作者tumbleweed
相关产品推荐
相关产品推荐

