给定以下数据帧
import pandas as pd
df = pd.DataFrame({'visited': ['2015-3-4', '2015-3-5','2015-3-6','2016-3-4', '2016-3-6', '2016-3-8'],'name':['John','John','John','Mary','Mary','Mary']})
df['visited']=pd.to_datetime(df['visited']) visited name
0 2015-03-01 John
1 2015-03-05 John
2 2015-03-06 John
3 2016-03-04 Mary
4 2016-03-06 Mary
5 2016-03-08 Mary我希望计算两个人每天的平均访问间隔,在这个例子中,结果应该是
avg_visited_interval name
0 1 John
1 2 Mary我怎么发动汽车呢?
发布于 2021-02-19 16:31:26
您可以将groupby.apply与diff和mean一起使用,如下所示:
df.groupby('name')['visited'].apply(lambda x: x.diff().mean()).to_frame('avg_visited_interval')结果:
name avg_visited_interval
John 1 days
Mary 2 days此处的avg_visited_interval列将为datetime类型。要将该列设置为整数(即天数),可以在diff()和mean()之间添加dt.days。
发布于 2021-02-19 16:30:31
使用带有lambda函数的GroupBy.agg表示Series.diff的差异,使用Series.dt.days将时间增量转换为天,最后使用Series.reset_index
df = (df.groupby('name')['visited']
.agg(lambda x: x.diff().dt.days.mean())
.reset_index(name='avg_visited_interval'))
print (df)
name avg_visited_interval
0 John 1.0
1 Mary 2.0最后,如有必要,更改列的顺序:
df = df[['avg_visited_interval','name']]
print (df)
avg_visited_interval name
0 1.0 John
1 2.0 Maryhttps://stackoverflow.com/questions/66274035
复制相似问题