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

基于逐行应用函数实现Pandas DataFrame行拆分

解决方案

你可以通过pandas的apply方法结合pd.concat实现每行展开的需求,具体操作如下:

  1. 构造原始DataFrame
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Col1': ['A', 'B', 'D'],
    'Price': [16, 12, 5],
    'Day': [5, 3, 8]
})
  1. 定义展开函数
    这里采用你实际场景的参数(除以18):
def Fn(Price, Day):
    pr = np.arange(Price/18, Price + Price/18, Price/18)
    da = np.arange(Day/18, Day + Day/18, Day/18)
    return pd.DataFrame({'Price': pr, 'Day': da})
  1. 逐行应用函数并合并结果

写法一(直观循环)

result_list = []
for _, row in df.iterrows():
    # 生成当前行对应的展开DataFrame
    temp_df = Fn(row['Price'], row['Day'])
    # 绑定当前行的Col1值
    temp_df['Col1'] = row['Col1']
    result_list.append(temp_df)

# 合并所有结果并调整列顺序
final_df = pd.concat(result_list, ignore_index=True)[['Col1', 'Price', 'Day']]

写法二(简洁apply)

final_df = pd.concat(
    df.apply(lambda x: Fn(x['Price'], x['Day']).assign(Col1=x['Col1']), axis=1).tolist(),
    ignore_index=True
)[['Col1', 'Price', 'Day']]

执行后,原始DataFrame的每一行都会按照Fn的规则展开为多行,且保留对应的Col1标识。比如示例中除以2的场景会生成2行对应一个Col1,实际除以18的场景会生成18行对应一个Col1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:35:18