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

如何用Pandas实现DataFrame每行多计算并展开结果?

解决方法

我来帮你实现这个需求!你想要把原DataFrame的每一行,根据total列的值生成多个计算行,最终扩展成包含calculation id和result的新DataFrame,对吧?下面是高效的实现方式,比iterrows更贴合Pandas的风格:

完整代码示例

import pandas as pd
import numpy as np

# 初始化原DataFrame
df = pd.DataFrame({
    'date': ['31/12/2015','31/12/2016','31/12/2017','31/12/2018', '31/12/2019','31/12/2020','31/12/2015','31/12/2016', '31/12/2017','31/12/2018','31/12/2019','31/12/2020'],
    'season': ['S1','S1','S1','S1','S1','S1','S2','S2','S2','S2','S2','S2'],
    'total' : [1,0,0,0,0.022313421,0.053791041,0,0,0.307783314,0,0,0]
})
df.date = pd.to_datetime(df.date)

def expand_row(row):
    # 生成从0到total的6个等分点(对应6次计算)
    linspace_vals = np.linspace(0, row['total'], 6)
    # 构建扩展后的行数据
    expanded_data = {
        'calculation id': range(1, 7),  # 计算ID从1到6
        'result': linspace_vals * 5  # 你的计算逻辑:每个值乘以5
    }
    expanded_df = pd.DataFrame(expanded_data)
    # 将原行的基础字段(date/season/total)复制到每一行
    expanded_df[['date', 'season', 'total']] = row[['date', 'season', 'total']]
    # 调整列顺序匹配你需要的格式
    return expanded_df[['date', 'season', 'total', 'calculation id', 'result']]

# 对原DataFrame的每一行应用扩展函数,合并所有结果
final_df = df.apply(expand_row, axis=1).reset_index(drop=True)

# 查看前6行(对应原第一行的扩展结果)
print(final_df.head(6))

代码说明

  1. 高效的行扩展方式:使用df.apply(axis=1)替代iterrows,因为apply是Pandas的向量化操作,在大数据集上运行速度更快。
  2. 生成等分计算值:用np.linspace(0, row['total'], 6)生成从0到当前行total值的6个均匀分布的数值,对应6次计算。
  3. 构建扩展DataFrame:为每个等分值创建包含calculation id和result的小DataFrame,再把原行的date、season、total字段复制到每一行。
  4. 格式调整:最后调整列的顺序,确保和你期望的输出格式一致。

适配示例的5行版本

如果你的示例里只需要5行计算(比如从total/5到total),可以修改linspace的部分,去掉初始的0值:

def expand_row(row):
    # 生成从total/5到total的5个等分点(对应5次计算)
    linspace_vals = np.linspace(0, row['total'], 6)[1:]  # 去掉第一个0值
    expanded_data = {
        'calculation id': range(1, 6),  # 计算ID从1到5
        'result': linspace_vals * 5
    }
    expanded_df = pd.DataFrame(expanded_data)
    expanded_df[['date', 'season', 'total']] = row[['date', 'season', 'total']]
    return expanded_df[['date', 'season', 'total', 'calculation id', 'result']]

这样运行后,原第一行的扩展结果就和你给出的示例完全一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:57:02