首页 > 解决方案 > 在 Python Dataframe 中,如何根据每个唯一 ID 的日期匹配第一个事件并捕获该特定事件?

问题描述

在 Python 中,我有一个带有 id 和许多事件日期和事件类型的数据框。我想为每个 id 找到第一个事件并创建一个新列来说明该日期,另一个为其第一个类型的事件创建另一个列。

  event_id  date    typeofevent
        e0 2015-07-20   1
        e0 2015-07-25   4
        e1 2015-06-02   2
        e1 2015-07-18   1
        e1 2015-07-20   3
        e2 2015-04-25   2
        e2 2015-07-28   2
        e2 2015-06-20   3
        e2 2015-05-25   4

df['first_event'] = df.groupby(['event_id'])['date'].first()

标签: pythondataframedatetimetime-seriesdata-manipulation

解决方案


由于这些日期遵循模式YYYY-MM-DD,因此简单的min()内部 agroupby()将起作用。这将需要每个event_id. 然后你可以merge()他们。

输入:

import pandas as pd

df = pd.DataFrame({
    'event_id': ['e0', 'e0', 'e1', 'e1', 'e1', 'e2', 'e2', 'e2', 'e2'],
    'date': [
        '2015-07-20', '2015-07-25', '2015-06-02', '2015-07-18', '2015-07-20',
        '2015-04-25', '2015-07-28', '2015-06-20', '2015-05-25'
    ],
    'typeofevent': [1, 4, 2, 1, 3, 2, 2, 3, 4]})

temp_df = df.groupby('event_id').agg({'date': 'min'}).reset_index()

df = df.merge(temp_df, on='event_id')

df.rename(columns={'date_x': 'date', 'date_y': 'first'}, inplace=True)

输出:

  event_id        date  typeofevent       first
0       e0  2015-07-20            1  2015-07-20
1       e0  2015-07-25            4  2015-07-20
2       e1  2015-06-02            2  2015-06-02
3       e1  2015-07-18            1  2015-06-02
4       e1  2015-07-20            3  2015-06-02
5       e2  2015-04-25            2  2015-04-25
6       e2  2015-07-28            2  2015-04-25
7       e2  2015-06-20            3  2015-04-25
8       e2  2015-05-25            4  2015-04-25

推荐阅读