pandas - Pandas GroupBy 不填写缺失数据
问题描述
我有一个半小时数据文件,我希望按小时分组。这有效:
data.groupby(pd.Grouper(freq='1h')).agg('sum')
但是,它会填充没有半小时数据的小时数。
如何执行这样的分组,但不创建输入 DataFrame 中没有数据的记录?例如来自:
07:00
07:30
09:00
09:30
我想创建:
07:00
09:00
不是:
07:00
08:00
09:00
谢谢
解决方案
如果您只是想过滤掉添加的时间,您可以按照cs95在评论中所说的或:
out = data.groupby(pd.Grouper(freq='1h')).sum(min_count=1).dropna()
如果min_count
bin 没有数据,则使 NaN 成为输出,然后可以使用 删除dropna()
。
如果您不希望一开始就计算这些额外的箱子,这可能会更复杂(请注意,今天也有类似的公开帖子)。但是给定每小时的垃圾箱频率,您可以执行以下操作:
out1 = data.groupby(data.index.hour).sum()
如果数据跨越多天,您可以这样做:
out2 = data.groupby([data.index.date, data.index.hour]).sum()
但请注意,这里的数据索引datetime
现在格式不正确,因此您可能需要转换回来。
这是我使用的示例数据:
import pandas as pd
dr = pd.date_range('1-1-2020 7:00', periods=6, freq='30min')
data = pd.DataFrame([10,20,30,40,50,60], index=dr, columns=['Values'])
data = data[data.index.hour != 8]
推荐阅读
- tensorflow - 具有图像增强数据集的 CNN 模型
- swift - 为模拟器构建应用程序时排除 *.a 文件
- java - 如何在 DragListener 中获取画布项目以便在其中绘制?
- python - 使用经过训练的模型进行预测时,如何测量每个节点的激活水平?
- ios - 蒸汽 4 认证
- python - 如何跳过一列并将其余列相乘?
- python - 如何替换文本文件中的字符串并将其保存到新文件中?
- mesibo - 当我添加依赖项实现“com.mesibo.api:mesibo:1.5.2”时任务:app:processDebugMainManifest FAILED
- javascript - 为什么导航不是从上到下显示而是从左到右显示
- excel - 数据提供者读取空单元格,我该如何处理?