pandas 按panda Dataframe 中每个值的首次出现分组

m1m5dgzv  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(157)

我有一个Pandas的数据框,看起来像这样:
| 身份证|用户|作用|时间戳|
| - ------|- ------|- ------|- ------|
| 1个|占|启动|2022年12月10日|
| 第二章|占|启动|2022年12月10日|
| 三个|占|结束|2022年2月2日|
| 四个|利内特|启动|2022年8月18日|
| 五个|利内特|启动|二○二二年三月二十四日|
| 六个|利内特|结束|二零二二年八月二十七日|
| 七|瑞秋|启动|二〇二二年二月七日|
| 八个|瑞秋|结束|2023年1月4日|
| 九|詹姆斯|启动|2022年6月12日|
| 十个|詹姆斯|结束|二○二二年五月十四日|
| 十一|詹姆斯|启动|二零二二年十一月二十八日|
| 十二|詹姆斯|启动|2022年8月9日|
| 十三|詹姆斯|结束|二○二二年二月十五日|
对于每个用户来说,可以有多个开始事件,但只有一个结束,想象一下他们有时需要重新开始一本书,但只完成一次。
我想要的是计算 first start和end之间的时间差,因此对于每个用户,保留每个组中“start”和“end”的 first 出现时间。
有什么提示吗?

axkjgtzd

axkjgtzd1#

>>> (df.groupby(["user", "action"], sort=False)["timestamp"]
       .first()
       .droplevel("action")
       .diff().iloc[1::2])

user
James       29 days
Jim        311 days
Linette     -9 days
Rachel    -331 days
Name: timestamp, dtype: timedelta64[ns]
  • 对于每个“用户”和“操作”对的“时间戳”,获取第一次出现的时间
  • 这将有效地占用第一个起点和(唯一的)终点
  • 然后降低石斑鱼的“行动”水平
  • 取结束和开始的差值
  • 每隔一个值获取每个用户差异

(sort=False可确保在groupby过程中不会混淆起始位置。)

相关问题