当然!以下是您的堆栈溢出问题的草稿,其中包含正确的代码格式:

标题:如何使用Polars计算Pandas DataFrame中每个ID的会话之间的时间?

问题:

我正在做一个任务,我有一个Pandas DataFrame,使用Python中的Polars库,包含'ID'和'Timestamp'列.每一行表示由"时间戳"标识的会话的结束.我正在try 创建一个名为"time_since_last_session"的新列,该列应包含每个唯一"ID"的会话之间的持续时间.

我已经能够使用以下代码计算特定过滤的‘ID’的会话之间的时间差:

import polars as pl

# DataFrame: sessions_features
# Columns: 'ID', 'Timestamp'

filtered_id = "BBIISSIOTNIFSIDYIUSA"
time_diff = sessions_features.filter(pl.col("ID") == filtered_id)["Timestamp"].diff().dt.seconds()

但是,我很难使用GROUP_BY()操作或类似操作为DataFrame中的每个‘ID’执行此计算.我曾try 使用map_group(),但没有成功.

有没有人可以指导我如何使用POLAR有效地对每个‘ID’执行这个操作?最小的可重现性示例如下:

import polars as pl
import pandas as pd

# Creating a sample DataFrame
data = {
    'ID': ['A', 'A', 'A', 'B', 'B', 'B'],
    'Timestamp': ['2023-01-01 10:00:00', '2023-01-01 10:30:00' ,'2023-01-01 11:00:00', '2023-01-01 12:00:00', '2023-01-01 12:30:00', '2023-01-01 13:00:00']
}

df = pd.DataFrame(data)

# Converting to Polars DataFrame
sessions_features = pl.from_pandas(df)

sessions_features = sessions_features.with_columns(
   pl.col("Timestamp").str.to_datetime()
)

print(sessions_features.filter(pl.col("ID") == "A")["Timestamp"].diff().dt.seconds())

此示例创建一个示例DataFrame,并计算特定ID的会话之间的时间差.然而,我们的目标是使用极点有效地为DataFrame中的每个唯一"ID"执行此计算.如有任何帮助或见解,将不胜感激!

在最小示例中,最终DF的预期结果为:

┌─────┬─────────────────────┬───────────────────────┐
│ ID  ┆ Timestamp           ┆ time_between_sessions │
│ --- ┆ ---                 ┆ ---                   │
│ str ┆ datetime[μs]        ┆ i64                   │
╞═════╪═════════════════════╪═══════════════════════╡
│ A   ┆ 2023-01-01 10:00:00 ┆ 0                     │
│ A   ┆ 2023-01-01 10:30:00 ┆ 1800                  │
│ A   ┆ 2023-01-01 11:00:00 ┆ 1800                  │
│ B   ┆ 2023-01-01 12:00:00 ┆ 0                     │
│ B   ┆ 2023-01-01 12:30:00 ┆ 1800                  │
│ B   ┆ 2023-01-01 13:00:00 ┆ 1800                  │
└─────┴─────────────────────┴───────────────────────┘

推荐答案

您可以按ID分组,然后对每个组应用滚动差异:

df.group_by("ID").map_groups(
    lambda g: g.with_columns(
        pl.col("Timestamp").diff().dt.total_seconds().fill_null(0).alias("Diff")
    )
)

Python相关问答推荐

如何将 map 数组组合到pyspark中每列的单个 map 中

给定数据点,制定它们的关系

过载功能是否包含Support Int而不是Support Int?

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

根据网格和相机参数渲染深度

如何自动抓取以下CSV

如何计算两极打印机中 * 所有列 * 的出现次数?

根据不同列的值在收件箱中移动数据

如何将双框框列中的成对变成两个新列

从收件箱中的列中删除html格式

ODE集成中如何终止solve_ivp的无限运行

如何在给定的条件下使numpy数组的计算速度最快?

在vscode上使用Python虚拟环境时((env))

在pandas中使用group_by,但有条件

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

如何从列表框中 Select 而不出错?

如何使用Numpy. stracards重新编写滚动和?

在单次扫描中创建列表