python - Pandas 数据框每天重新采样和计数事件
问题描述
我有一个带有时间索引的数据框。我可以重新采样数据以获得(例如)每天的平均值,但是我也想获得每天的计数。这是一个示例:
import datetime
import pandas as pd
import numpy as np
dates = pd.date_range(datetime.datetime(2012, 4, 5, 11,
0),datetime.datetime(2012, 4, 7, 7, 0),freq='5H')
var1 = np.random.sample(dates.size) * 10.0
var2 = np.random.sample(dates.size) * 10.0
df = pd.DataFrame(data={'var1': var1, 'var2': var2}, index=dates)
df1=df.resample('D').mean()
我还想获得每天计数的第三列“计数”:
count
3
5
7
非常感谢!
解决方案
使用Resampler.agg
然后MultiIndex
在列中展平:
df1 = df.resample('D').agg({'var1': 'mean','var2': ['mean', 'size']})
df1.columns = df1.columns.map('_'.join)
df1 = df1.rename(columns={'var2_size':'count'})
print (df1)
var1_mean var2_mean count
2012-04-05 3.992166 4.968410 3
2012-04-06 6.843105 6.193568 5
2012-04-07 4.568436 3.135089 1
替代解决方案Grouper
:
df1 = df.groupby(pd.Grouper(freq='D')).agg({'var1': 'mean','var2': ['mean', 'size']})
df1.columns = df1.columns.map('_'.join)
df1 = df1.rename(columns={'var2_size':'count'})
print (df1)
var1_mean var2_mean count
2012-04-05 3.992166 4.968410 3
2012-04-06 6.843105 6.193568 5
2012-04-07 4.568436 3.135089 1
编辑:
r = df.resample('D')
df1 = r.mean().add_suffix('_mean').join(r.size().rename('count'))
print (df1)
var1_mean var2_mean count
2012-04-05 7.840487 6.885030 3
2012-04-06 4.762477 5.091455 5
2012-04-07 2.702414 6.046200 1
推荐阅读
- elasticsearch - 在 Windows 10 上安装 elasticsearch 7.8.0 会出现错误,因为 TempDirectory 和 JVMParserFailed 未被识别为内部或外部命令
- cmake - 覆盖每个目标的 CMAKE_CXX_FLAGS
- noraui - 如何在 NoraUi 中升级 Chrome 网络驱动程序?
- linux - aspnetcore 3.1 linux docker连接到windows主机上的sql server
- serverless - 将 serverless-tscpaths 插件与 serverless-plugin-optimize 一起使用会导致相对路径的导入错误
- javascript - 调整屏幕/窗口大小后,JS 侧边栏菜单动画在随机分辨率下不起作用
- html - Mailkit TextPart IsHtml 内容类型检查不起作用
- docker - 错误:gcloud 崩溃(TypeError):需要一个类似字节的对象,而不是“str”
- angular - 完成所有 api 调用后以角度执行函数
- c# - Xamarin 表单:来自视图模型的命令绑定