python - 在 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()
解决方案
由于这些日期遵循模式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
推荐阅读
- c# - MediatR 在 IIS 上找不到处理程序
- php - php中自动填充的文本框值
- javascript - 根据存储在对象数组中的坐标,每秒在视频上的画布覆盖上绘制多个矩形
- reactjs - 调用 props.generateRandomQuote() 返回 undefined
- excel - 通过 VBA 设置默认打印机
- c# - 将控制器 ASP.NET 中的 JSON 哈希集反序列化为哈希集或字典
- apache-kafka-streams - 2.3.1版本删除空目录失败
- javascript - 如果等于当前 URL,则 Jquery 添加 Active 类
- java - 有没有更好的方法让我的计算机对手生成(3>随机长度<=7)的单词?
- azure - 从 Azure 部署中排除 Azure Function 中的文件