首页 > 解决方案 > 从数据框中获取最新响应

问题描述

我有一个需要循环的数据集,它返回一个数据框,其中只有每个受访者的最新回复,但我无法解决它,你能帮我吗?数据集是这样的:

respondent         date         answer  
     1          22/08/2021         1
     1          23/08/2021         3
     1          25/08/2021         1
     2          22/08/2021         2
     2          22/08/2021         3
     2          23/08/2021         1
     3          22/08/2021         2
     3          24/08/2021         3
     4          22/08/2021         2
     4          25/08/2021         3

标签: pythonpandasdataframeloops

解决方案


假设我们有以下数据框:

import pandas as pd

df = pd.DataFrame(
    {
        "respondent": [1, 1, 1, 2, 2, 3, 4, 4],
        "date": pd.date_range(start="1/1/2018", end="1/08/2018"),
        "answer": [2, 3, 1, 1, 2, 2, 3, 1],
    }
)

看起来像:

   respondent       date  answer
0           1 2018-01-01       2
1           1 2018-01-02       3
2           1 2018-01-03       1
3           2 2018-01-04       1
4           2 2018-01-05       2
5           3 2018-01-06       2
6           4 2018-01-07       3
7           4 2018-01-08       1

你需要的是:

  1. 受访者分组
  2. 获取他最近的日期(最大日期)
  3. 找到具有上一步日期的原始数据框的行

这可以通过以下方式完成:

df_new = df[df.groupby('respondent').date.transform('max') == df['date']]

并将导致:

   respondent       date  answer
2           1 2018-01-03       1
4           2 2018-01-05       2
5           3 2018-01-06       2
7           4 2018-01-08       1

推荐阅读