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
相关产品推荐
相关产品推荐

