Python 我试图在每个组中按ID分组并按日期排序,以查找事件之间的时间

Python 我试图在每个组中按ID分组并按日期排序,以查找事件之间的时间,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,下面是一个示例数据框,用于重新创建我正在使用的数据: df = pd.DataFrame( { 'id': [1,1,1,1,2,2,2,3,3,4,4,4], 'date': ['2017-01-09', '2017-01-19', '2017-01-20', '2017-01-21', '2017-01-26', '2017-01-30', '2017-02-07', '2017-02-10', '2017-02-13', '2017-02-15', '2017-02-20', '2017-

下面是一个示例数据框,用于重新创建我正在使用的数据:

df = pd.DataFrame( {
'id': [1,1,1,1,2,2,2,3,3,4,4,4],
'date': ['2017-01-09', '2017-01-19', '2017-01-20', '2017-01-21', '2017-01-26', '2017-01-30', '2017-02-07', '2017-02-10', '2017-02-13', '2017-02-15', '2017-02-20', '2017-02-21'],
'event': ['A','A','B','A','A','A','B','A','B','A','A','B']
} )
我试图做的是按“id”分组,但是,使用grouby方法实际上并不是按id分组记录:

df=df.groupby(['id'])

此外,我希望在每个组内按日期排序,然后为每个组内事件“B”和事件“B”之前最近的事件“a”之间的天数创建一个新列

在此方面的任何帮助都将不胜感激


编辑-我希望输出类似于以下示例:

我有一个解决方案,但我认为应该有一个有效的方法来解决它

df['date'] = pd.to_datetime(df['date'])

df.groupby("id").apply(
    lambda x: x.loc[x['event']=='B', 'date'] - x.loc[(x['event']!='B')&(x['date'] <= x.loc[x['event']=='B', 'date'].values[0]), 'date'].max()
).reset_index(name='date_gap').drop(columns=['level_1'])
df['date']=pd.to_datetime(df['date'])
df.groupby(“id”)。应用(

lambda x:x.loc[x['event']='B','date']-x.loc[(x['event']!='B')&(x['date']您还可以从给定的输入中添加预期的输出样本吗?请参阅我提供的链接,以获取示例。我希望以与图像中主题分组类似的方式对ID进行分组。然后,我希望按日期排序,并能够识别事件“B”与事件“B”之前最近的事件“a”之间的天数'在每个组中。不幸的是,这给了我一个错误:TypeError:不支持的操作数类型-:'str'和'str'@Jake nieder,您应该首先将日期列设置为datetime类型。我编辑了我的答案。