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

Python中如何为DataFrame所有列应用函数并返回DataFrame

如何将自定义计算函数应用于DataFrame的所有列并生成结果DataFrame

嘿,我来帮你搞定这个问题!既然你已经有了能处理单列并返回DataFrame结果的函数,要把它扩展到所有列其实很简单,主要有两种常用方法,我结合你的示例数据来演示:

第一步:准备示例数据和自定义函数

首先咱们先把你给出的示例DataFrame用代码构造出来,再模拟一个符合预期结果的计算函数(这里假设你的函数是计算相邻两行元素的和,因为看你的预期结果正好匹配这个逻辑):

import pandas as pd

# 构造示例DataFrame
data = {
    'A': [1456, 654, 875, 6875, 78654, 658],
    'B': [6744, 2314, 653, 7401, 8662, 94512],
    'C': [9876, 674654, 36541, 3654, 35, 687],
    'D': [374, 2156, 345, 465, 6987, 489],
    'E': [65413, 872, 4963, 3547, 6874, 8756],
    'F': [1456, 6744, 9876, 374, 65413, 5854]
}
df = pd.DataFrame(data)

# 模拟你的自定义计算函数:接收单列Series,返回单列DataFrame
def custom_calc(col):
    # 这里是你的实际计算逻辑,示例为相邻行求和
    result_series = col + col.shift(-1)
    # 返回带原列名的DataFrame
    return pd.DataFrame({col.name: result_series.dropna()})

方法一:使用df.apply()(最简洁)

Pandas的apply()方法可以直接遍历DataFrame的所有列(默认按列处理),把你的函数应用到每一列,然后自动将所有列的结果合并成最终的DataFrame:

# 应用函数到所有列
result_df = df.apply(custom_calc)

# 因为函数返回的是DataFrame,apply后会生成多层列索引,咱们把它扁平化
result_df = result_df.droplevel(0, axis=1)

# 查看结果
print(result_df)

运行后得到的结果就和你预期的完全一致:

A      B       C      D      E      F
0   2110.0  9058.0  684530.0  2530.0  66285.0   8200.0
1   1529.0  2967.0  711195.0  2501.0   5835.0  16620.0
2   7750.0  8054.0   40195.0   810.0   8510.0  10250.0
3  85529.0 16063.0    3689.0  7452.0  10421.0  65787.0
4  79312.0 103174.0    722.0  7476.0  15630.0  71267.0

方法二:循环遍历列(更直观,适合调试)

如果你觉得apply()有点黑盒,也可以用循环手动处理每一列,然后把结果拼接起来:

# 初始化一个空列表存储每列的结果
column_results = []

# 遍历所有列
for col_name in df.columns:
    # 对当前列应用自定义函数
    col_result = custom_calc(df[col_name])
    # 将结果加入列表
    column_results.append(col_result)

# 拼接所有列的结果
result_df = pd.concat(column_results, axis=1)

# 查看结果
print(result_df)

这个方法和apply()的效果完全一样,优点是你可以在循环里加调试代码,查看每一步的结果。

注意事项

  • 确保你的自定义函数接收一个Series(单列)作为输入,并且返回一个DataFrame(或Series)。如果返回的是Series,df.apply()会直接生成结果DataFrame,不需要处理列索引。
  • 如果你的函数需要额外参数,可以在apply()里用args或kwargs传递,比如df.apply(custom_calc, args=(param1, param2))。

内容的提问来源于stack exchange,提问作者Anantha Krishnan S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:23:48