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

Pandas中用apply映射函数添加列报错,求问题排查与解决

问题分析与解决

错误原因

你当前代码的核心问题有两个:

  1. axis参数方向错误:axis='columns'会让apply逐行处理数据,每次传入函数的是一行的Series,但你的check_streak函数是为处理单列Series设计的,两者逻辑不匹配。
  2. result_type='expand'无法适配多结果拼接:即使修正axis方向,该参数也没法正确将每列生成的3列结果合并成最终的目标DataFrame。

正确实现方式

我们需要逐列应用函数,再将所有处理后的结果按列拼接,代码如下:

import pandas as pd

# 保留你编写的函数不变
def check_streak(x):
    streak = x.to_frame(name=x.name)
    streak[f'start_of_streak'] = streak[x.name].ne(streak[x.name].shift())
    streak[f'{x.name}_streak_count'] = streak['start_of_streak'].cumsum()
    return streak

# 示例数据构建
data = {
    'col_1': [1,1,1],
    'col_2': [0,1,0]
}
pivot = pd.DataFrame(data, index=['2022-01-01', '2022-02-01', '2022-03-01'])

# 逐列处理并拼接结果
processed_list = [check_streak(pivot[col]) for col in pivot.columns]
stack_example = pd.concat(processed_list, axis=1)

print(stack_example)

最终输出

运行后会得到符合预期的结果,每一列被替换为对应的原始值、 streak起始标记、 streak计数三列:

col_1  start_of_streak  col_1_streak_count  col_2  start_of_streak  col_2_streak_count
2022-01-01      1             True                   1      0             True                   1
2022-02-01      1            False                   1      1             True                   2
2022-03-01      1            False                   1      0             True                   3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:32:40