You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两个序列的范围在Pandas中生成新行?

解决Pandas生成区间采样并扩展行的问题

需求说明

你有如下初始DataFrame,需要针对每个CLASS的TOP和BOT值生成指定数量的区间采样,并将这些采样值扩展为新行,保留对应ID和CLASS信息:

import pandas as pd
import numpy as np

df = pd.DataFrame({"ID":[1, 1],
                   "CLASS":["A","B"],
                   "TOP":[12.4, 29.1],
                   "BOT":[29.1, 32.8]})

实现代码

可以通过apply遍历每行生成采样序列,再合并为最终DataFrame:

# 设置统一采样数量
n_samples = 5

# 生成采样并扩展行
result = df.apply(
    lambda row: pd.DataFrame({
        "ID": [row["ID"]] * n_samples,
        "CLASS": [row["CLASS"]] * n_samples,
        "VALUE": np.linspace(row["TOP"], row["BOT"], n_samples)
    }),
    axis=1
).concat().reset_index(drop=True)

print(result)

输出结果

执行后会得到如下结构的DataFrame:

ID CLASS   VALUE
0   1     A  12.400
1   1     A  16.575
2   1     A  20.750
3   1     A  24.925
4   1     A  29.100
5   1     B  29.100
6   1     B  30.025
7   1     B  30.950
8   1     B  31.875
9   1     B  32.800

灵活调整(按CLASS设置不同采样数)

如果需要给不同CLASS设置不同采样数,可先给原DataFrame新增采样数列,再修改apply逻辑:

# 给每个CLASS指定采样数
df["SAMPLE_NUM"] = [5, 3]

# 按行指定采样数生成结果
result_custom = df.apply(
    lambda row: pd.DataFrame({
        "ID": [row["ID"]] * row["SAMPLE_NUM"],
        "CLASS": [row["CLASS"]] * row["SAMPLE_NUM"],
        "VALUE": np.linspace(row["TOP"], row["BOT"], row["SAMPLE_NUM"])
    }),
    axis=1
).concat().reset_index(drop=True)

print(result_custom)

这段代码会给CLASS A生成5个采样,CLASS B生成3个采样,满足你“无需每个CLASS都保留5个采样”的需求。

内容的提问来源于stack exchange,提问作者user026

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:25:25