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

pandas数据框遍历计算回答平均位置及问答间隔均值方法

Pandas对话统计指标实现方案

不需要手动遍历DataFrame,直接用pandas内置的向量化操作和分组逻辑即可高效完成两项指标计算,具体实现如下:


第一步:构造示例测试数据

import pandas as pd

# 匹配题目给出的示例数据
data = [
    [1, "你好,我叫约翰", 1, 0, 0],
    [1, "你最近怎么样?", 2, 0, 1],
    [1, "我很好,谢谢", 3, 1, 0],
    [2, "你好,请问我能为你做什么?", 1, 0, 1],
    [2, "我想点一份披萨", 2, 1, 0],
    [3, "你好,先生", 1, 0, 0],
    [3, "你好", 2, 0, 0],
    [3, "请问需要什么帮助?", 3, 0, 1],
    [3, "我想要一杯咖啡", 4, 1, 0]
]
df = pd.DataFrame(data, columns=["ID", "Sentences", "Interaction_Number", "Answer", "Question"])

第二步:计算两项统计指标

指标1:所有回答的平均交互位置

直接筛选Answer=1的记录,对交互序号列求均值即可:

avg_answer_position = df[df["Answer"] == 1]["Interaction_Number"].mean()

指标2:问题到对应回答的平均交互间隔

核心逻辑:按会话ID分组,在每个会话内部按交互序号排序后,为每个问题匹配同会话内排在它之后、距离最近的回答,计算两者的交互序号差值,最后对所有差值求均值:

# 先确保每个会话内记录按交互序号升序排列
df = df.sort_values(by=["ID", "Interaction_Number"]).reset_index(drop=True)

# 为每条记录匹配同组内后续最近回答的交互位置:用bfill向后填充回答的位置
df["nearest_following_answer_pos"] = df.groupby("ID", group_keys=False).apply(
    lambda group: group["Interaction_Number"].where(group["Answer"] == 1).bfill()
)

# 筛选所有问题记录,计算间隔后求均值
avg_qa_gap = df[df["Question"] == 1].apply(
    lambda row: row["nearest_following_answer_pos"] - row["Interaction_Number"], axis=1
).mean()

结果验证

运行代码打印结果:

print(f"回答平均出现位置:{avg_answer_position}")
print(f"问题到回答的平均交互间隔:{avg_qa_gap}")

输出为:

回答平均出现位置:3.0
问题到回答的平均交互间隔:1.0

和题目给出的手动计算结果完全一致。

补充说明:如果你的数据中存在部分问题没有后续对应回答的场景,计算间隔前先过滤nearest_following_answer_pos为空的记录即可,避免空值干扰统计结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:48:17