看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
质量部门每天要从上千条到货记录里随机抽 20% 做破坏性检测,并打印带“新序号”的纸质清单。 手动挑?太慢!本篇教你用 sample
(随机抽样)+ reset_index
(重排序号)+ assign
(追加字段)三条链式语句,一键生成抽检列表,直接导出 Excel 贴到实验室。
原始数据(字符串):
import pandas as pd
from io import StringIO
raw = """到货ID,商品名,数量,供应商
D001,手机壳,100,A厂
D002,耳机,50,B厂
D003,键盘,80,C厂
D004,鼠标,200,A厂
D005,显示器,30,B厂
D006,充电器,150,C厂
D007,数据线,120,A厂
D008,保护膜,90,B厂"""
df = pd.read_csv(StringIO(raw))
# ...
需求描述:
正确结果示意(随机 2 条示例):
抽检序号 到货ID 商品名 数量 供应商 抽检日期
0 1 D002 耳机 50 B厂 2025-09-07
1 2 D006 充电器 150 C厂 2025-09-07
我们的思路如下:
sample(frac=0.1, random_state=42)
按比例随机抽,设种子保证可复现;reset_index(drop=True)
把旧索引扔掉,新索引 0→n-1;assign
一次性追加“抽检序号”与“抽检日期”;reindex
调列顺序,直接 to_excel
交差。代码如下:
(
df
.sample(frac=0.2, random_state=42) # ① 随机10%
.reset_index(drop=True) # ② 重排0基索引
.assign(抽检序号=lambda x: x.index + 1, # ③ 新序号1基
抽检日期=pd.Timestamp('today').date()) # ③ 今天
.reindex(columns=['抽检序号', '到货ID', '商品名',
'数量', '供应商', '抽检日期'])
)
代码拆解:
frac=0.1
自动向上取整,8 行抽 1 行;改 frac=0.2
即 20%,随调随用。reset_index(drop=True)
去掉旧索引,避免“D005”这类原始序号干扰纸质清单。assign
支持列间互引用,x.index + 1
让序号从 1 开始,符合纸质习惯。(完)
更新时间:2025-09-07 17:12:08 标签:pandas python 随机抽样