首页 > 编程问答 >Pandas 中按组排列的前 2 个时间戳的差异

Pandas 中按组排列的前 2 个时间戳的差异

时间:2024-07-23 08:00:11浏览次数:5  
标签:python pandas

我有一个包含登录日期和时间戳的用户表。

我正在尝试计算每个用户最近两次登录之间的差异。

例如 (df):

User logints|| |34
2024-07-10 07:49:11.773 34
2024-07-10 07:52:11.606 34
2024-07-11 08:49:11.947| ||34 2024-07-11 09:49:11.758
34 2024-07-12 09:46:11.758
37 2024-07-10 08:46:11.587
37 2024-07-10 08:49:11.356
37 2024-07-09 08:49:11.744
38 2024-07-10 08:55: 11.742
期望的结果: 用户

logindelta

34 1天
37 3分钟
38 na
这是我尝试过的: 问题是 diff 并没有始终如一地在 groupby 内进行计算。

我也尝试过转入列进行计算,但未成功。 似乎应该有一个我可以在该组上运行的操作。
top_two_userlogins = df.groupby('User')['logints'].nlargest(2).diff()

The issue is the diff does not consistently be calculating within the groupby.

I've also tried pivoting into columns for the calculation unsuccessfully. It seems as though there should be an operation I can run on the group.


import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    'User': [34, 34, 34, 34, 37, 37, 37, 38],
    'logints': [
        '2024-07-10 07:49:11.773', '2024-07-10 07:52:11.606',
        '2024-07-11 08:49:11.947', '2024-07-12 09:46:11.758',
        '2024-07-10 08:46:11.587', '2024-07-10 08:49:11.356',
        '2024-07-09 08:49:11.744', '2024-07-10 08:55:11.742'
    ]
})
df['logints'] = pd.to_datetime(df['logints'])

# 按用户分组并获取每个用户的最后两次登录
top_two_userlogins = df.groupby('User')['logints'].apply(lambda x: x.nlargest(2))

# 计算时间差
login_delta = top_two_userlogins.groupby(level=0).diff().dropna()

# 创建结果 DataFrame
result = pd.DataFrame({
    'logindelta': login_delta
})

# 打印结果
print(result)

解释:

  1. 获取每个用户的最后两次登录:
  2. 我们使用 groupby('User') 按用户对 DataFrame 进行分组。
  3. 然后,我们使用 .apply(lambda x: x.nlargest(2)) 获取每个用户组中 logints 列的两个最大(最新)时间戳。

  4. 计算时间差:

  5. 我们再次使用 groupby(level=0) 按用户分组,这次是在 top_two_userlogins 系列上进行分组。
  6. 然后,我们使用 .diff() 计算每个用户组中的连续时间戳之间的差异。
  7. 使用 .dropna() 删除生成的 NaN 值(这些值对应于每个用户组中的第一个时间戳,因为没有先前的值来计算差异)。

  8. 创建结果 DataFrame:

  9. 我们创建一个名为 result 的新 DataFrame,其中包含计算出的时间差作为 logindelta 列。

输出:

            logindelta
User                  
34  1 days 00:56:59.811
37  0 days 00:03:00.000

这表明用户 34 的最后两次登录之间相差 1 天 0 小时 56 分 59.811 秒,用户 37 的最后两次登录之间相差 3 分钟。

标签:python,pandas
From: 78780728

相关文章

  • 从Python中的列表列表中提取随机列表选择
    我有一个从图像生成的RGB值列表:color_list=[(192,155,120),(132,81,65),(226,226,199),(76,94,117),(140,157,178),(17,34,54),(217,213,139),(134,171,144),(98,123,95),(109,145,96),(181,109,92),(71,47,39),......
  • 这段代码是否保证Python对象被立即删除?
    我正在将Redis异步客户端与Celery一起使用,但在两者之间的集成方面遇到了一些问题。上下文是我需要删除redis.Redis实例(在构造函数中创建)以便关闭连接(该对象有一个close方法,但当asyncio事件循环关闭时我无法使用它,heal_client方法仅在这些情况下才会使用。我的代码如......
  • python selenium 行为错误:AttributeError:“Context”对象没有属性“driver”
    我正在使用pythonselenium与Behavior包一起工作。这是代码:@given('theuserisontheloginpage')defstep_given_user_on_login_page(context):PATH='C:/Users/PycharmProjects/ui_test/chromedriver-win32/chromedriver.exe'context.driver=......
  • python 脚本中的路点用于处理大数据集
    我编写了一个脚本,将一堆来自api的请求写入csv文件。该api中有数千个请求,并且在结束循环/退出程序之前永远不会结束。如何合并航路点,以便如果再次发生停顿,它会自动继续前进并最终打印所有请求?我尝试了一些不起作用的方法,但我不知道下一步该怎么做。以下是使用航路点......
  • Python 中的 SSL 模块不可用(在 OSX 上)
    我在OSX10.13上的virtualenv中运行时遇到问题。我已经运行了pipinstall并且路径brewinstallopenssl指向/usr/local/include/openssl有谁知道如何解决这一问题?在我重新安装../opt/openssl/include/openssl使用python后,这种......
  • 在 value_counts pandas 分类数据中包含零
    这是我之前提出的问题的后续问题。老问题可以在这里找到答案来自@jezrael现在我想绘制成绩。用于绘制我可以做的所有成绩但是,我无法弄清楚如何绘制每个成绩组(包括零计数)。counts_gardes=df1['new'].value_counts(sort=False)counts_gardes.......
  • AWS Elastic Beanstalk chown PythonPath 错误
    我正在AWS的elasticbeanstalk上部署一个Web应用程序,遇到了同样的错误:[StageApplication].Stoprunningthecommand.Error:chown/var/app/staging/venv/bin/python:nosuchfileordirectory.我在我的环境配置中看到属性:PYTHONPATH:/var/......
  • Python:支持索引的内存对象数据库?
    我正在做一些数据整理,如果我可以将一堆字典放入内存数据库中,然后对其运行简单的查询,这会简单得多。例如,类似:people=db([{"name":"Joe","age":16},{"name":"Jane","favourite_color":"red"},])over_16=db.filter(age__g......
  • 如何构建一维数组的二维数组的特定 Python 结构?
    如何构建一维数组(即行向量)的二维数组的特定结构以满足特定我正在维护的遗留程序的结构?我可以在此结构中生成正确的内容all_measurements[:12]array([[0.,0.,0.,2.],[0.02,0.334,0.04,2.24],[0.04,0.668,0.08,2.48],...........
  • 如何使用 Python Flask 将新的咖啡馆(元素)添加到数据库(SQLite)?
    这是我的代码:@app.route("/add",methods=["POST"])defpost_new_cafe():new_cafe=Cafe(name=request.form.get("name"),map_url=request.form.get("map_url"),img_url=request.form.get("img......