Pandas中用apply映射函数添加列报错,求问题排查与解决
问题分析与解决
错误原因
你当前代码的核心问题有两个:
- axis参数方向错误:
axis='columns'会让apply逐行处理数据,每次传入函数的是一行的Series,但你的check_streak函数是为处理单列Series设计的,两者逻辑不匹配。 - 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
相关产品推荐
相关产品推荐

