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
假设我有以下数据集:
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