给定以下数据帧
import pandas as pd
df = pd.DataFrame({'visited': ['2015-3-1', '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 [4,1] John
1 [2,2] Mary我应该如何实现这一点?(例如,对于第一个示例,存在4 days第0行和第1行之间以及2 days在第1行和第2行之间,这导致[4,1])
发布于 2021-02-25 21:26:50
使用自定义lambda函数`Series.diff`,按位置删除第一个值,转换为整数和列表:
df = (df.groupby('name')['visited']
.apply(lambda x: x.diff().iloc[1:].dt.days.astype(int).tolist())
.reset_index(name='intervals'))
print (df)
name intervals
0 John [4, 1]
1 Mary [2, 2]https://stackoverflow.com/questions/66369344
复制相似问题