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

Pandas按多列分组应用Krippendorff's alpha函数报错求助

问题解决:Pandas分组应用自定义函数报错TypeError: 'numpy.float64' object is not callable

场景与需求

现有如下结构的Pandas DataFrame:

Chapterlabel_codeannotatorrounded_lenght
Chapter111159
Chapter 23230
Chapter 242150

字段说明:

  • label_code:8种情绪的数字编码
  • annotator:标注者ID
  • rounded_lenght:文本片段长度
  • Chapter:书籍章节

需求:按Chapter和label_code分组,对每组应用自定义函数krippendorffs_emotion(该函数内部调用sf.calculate_krippendorffs_alpha_for_df计算标注者一致性Krippendorff's alpha)。

错误代码与报错

尝试执行的代码:

grouped_df = emo_chapters_df.groupby(['Chapter','label_code']).apply(kripendorf_emotion(emo_chapters_df))
grouped_df

运行时报错:

TypeError: 'numpy.float64' object is not callable

错误原因分析

你直接调用了kripendorf_emotion(emo_chapters_df),这会立即执行该函数并返回一个numpy.float64类型的结果,但apply方法需要接收的是函数对象,不是函数执行后的返回值。相当于把一个数值传给了apply,而数值无法被调用,因此触发该错误。

解决方法

方法1:直接传递函数对象(推荐)

将函数名直接传给apply,apply会自动把每个分组的子DataFrame作为参数传入函数:

grouped_df = emo_chapters_df.groupby(['Chapter','label_code']).apply(kripendorf_emotion)
grouped_df

方法2:用lambda包装(需额外参数时使用)

如果krippendorffs_emotion需要分组子DataFrame之外的其他参数,可通过lambda包装传递:

# 示例:传入额外参数param1
grouped_df = emo_chapters_df.groupby(['Chapter','label_code']).apply(lambda x: krippendorffs_emotion(x, param1=xxx))
grouped_df

额外注意

  • 确保krippendorffs_emotion函数的第一个参数用于接收分组后的子DataFrame
  • 若部分分组数据量不足(比如仅单个标注者),需在函数内部添加判断逻辑,避免计算Krippendorff's alpha时触发额外报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:10:30