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

如何从dataframe中提取每位受访者的最新回复记录

实现方案(基于Pandas)

步骤1:预处理日期字段

首先需要把date列从字符串格式转换为Pandas可识别的日期格式,避免按字符串排序出现逻辑错误:

import pandas as pd

# 构造示例数据集
df = pd.DataFrame({
    'respondent': [1,1,1,2,2,2,3,3,4,4],
    'date': ['22/08/2021','23/08/2021','25/08/2021','22/08/2021','22/08/2021','23/08/2021','22/08/2021','24/08/2021','22/08/2021','25/08/2021'],
    'answer': [1,3,1,2,3,1,2,3,2,3]
})

# 转换日期格式,日/月/年的格式对应设置dayfirst=True
df['date'] = pd.to_datetime(df['date'], dayfirst=True)

方法1:排序后分组取最新记录

先按受访者ID、日期升序排序,再按受访者分组取每组最后一条记录,即为该受访者的最新回复:

df_sorted = df.sort_values(by=['respondent', 'date'])
result = df_sorted.groupby('respondent').last().reset_index()

如果同一受访者同一天有多条回复,该方法会取同一天里排序靠后的那条记录,若需要保留同一天的所有最新回复可使用方法2。

方法2:匹配最大日期筛选

先按受访者分组计算每组的最大日期,再筛选原数据中日期等于对应受访者最大日期的所有记录:

df['max_date'] = df.groupby('respondent')['date'].transform('max')
result = df[df['date'] == df['max_date']].drop(columns='max_date').reset_index(drop=True)

最终输出结果

示例数据场景下两种方法输出结果一致:

respondentdateanswer
12021-08-251
22021-08-231
32021-08-243
42021-08-253

内容的提问来源于stack exchange,提问作者Diogo Nóbrega

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:54:08