Pandas 组和随时间的平均值

Pandas group and average over time

假设我有以下数据集:

                    t  val
0 2022-01-01 10:00:00    1
1 2022-01-02 10:00:00    1
2 2022-01-03 10:00:00    1
3 2022-01-04 10:00:00    1
4 2022-01-05 10:00:00    1
5 2022-01-06 10:00:00    2
6 2022-01-07 10:00:00    2
7 2022-01-08 10:00:00    2
8 2022-01-09 10:00:00    2
9 2022-01-10 10:00:00    2

可以计算日期时间列的平均值:

df["t"].mean()

但是,如果我尝试按 val 对数据集进行分组并计算 t 列的平均值:

df.groupby("val")["t"].mean()

出现错误:

DataError: No numeric types to aggregate

所以直接聚合是行不通的。一种解决方法是先将 t 转换为 POSIX 时间戳,然后将分组列转换回日期时间,如 :

所示
df["tstamp"] = df["t"].astype(int)
gr = df.groupby("val")["tstamp"].mean()
dfres = pd.to_datetime(gr)

是否有更优雅的方式(使用单行)实现随时间的聚合而无需显式转换?

您可以按照建议尝试:

df.groupby('val')['t'].apply(lambda x: x.min() + (x - x.min()).mean())

Output:

val
1   2022-01-03 10:00:00
2   2022-01-08 10:00:00