当然!以下是您的堆栈溢出问题的草稿,其中包含正确的代码格式:
标题:如何使用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 │
└─────┴─────────────────────┴───────────────────────┘