如何计算 YYYY-MM-DD 形式的 Python 日期时间对象的汇总统计数据(均值和标准差)?我想对具有不同 ID 的不同日期时间对象组执行此操作。
数据如下:
import datetime as dt
df = pd.DataFrame({
'Date': [dt.date(2017,9,1),dt.date(2017,9,21),dt.date(2017,9,14),
dt.date(2017,11,7),dt.date(2017,8,1),dt.date(2017,12,21),
dt.date(2017,12,14),dt.date(2017,10,1),dt.date(2017,10,1)],
'ID': [1,2,3,3,2,1,2,3,2],
})
Date ID
2017-09-01 1
2017-11-01 2
2017-09-01 3
2017-11-07 3
2017-08-01 2
2017-11-01 1
2017-12-01 2
2017-10-01 3
2017-10-01 2
我想要一个看起来像这样的结果:
ID_1_mean ID_1_sd ID_2_mean ID_2_sd ...
YYYY-MM-DD int YYYY-MM-DD int ...
其中 YYYY-MM-DD 是组 1 中日期的平均值,int 是组 1 中的平均值,对所有组重复。
最佳答案
这是一个有点笨拙的解决方法:
- 使用
pd.to_datetime()
将datetime.date
转换为pandas.Timestamp
- 使用
.astype(int)
将pandas.Timestamp
转换为整数 - 计算这些整数的平均值和标准差
- 将均值转换为
pandas.Timestamp
- 将 std 转换为
pandas.Timedelta
设置:
df = pd.DataFrame({
'Date': [dt.date(2017,9,1),dt.date(2017,9,21),dt.date(2017,9,14),
dt.date(2017,11,7),dt.date(2017,8,1),dt.date(2017,12,21),
dt.date(2017,12,14),dt.date(2017,10,1),dt.date(2017,10,1)],
'ID': [1,2,3,3,2,1,2,3,2],
})
解决方案:
df['Date_int'] = pd.to_datetime(df['Date']).astype(int)
res = df.groupby('ID').agg(['mean', 'std'])
res.columns = ['_'.join(c) for c in res.columns.values]
res['Date_mean'] = pd.to_datetime(res['Date_int_mean'])
res['Date_std'] = pd.to_timedelta(res['Date_int_std'])
res = res[['Date_mean', 'Date_std']]
res
Date_mean Date_std
ID
1 2017-10-26 12:00:00 78 days 11:43:56.874291
2 2017-10-01 18:00:00 55 days 15:53:10.401720
3 2017-10-07 16:00:00 27 days 14:38:57.222514
关于python - 如何计算 pandas datetime 对象的均值和方差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54609989/