python - 如何用离散数据重新采样 Pandas 中的数据?
问题描述
我被熊猫困住了。我的想法是重新采样由因子表示的数据。例如,我观察到了两只猫,名叫查尔斯和瓦伦丁。由于动物表达行为的时间更长,因此在当前行为发生变化时进行观察。我想重新采样以获得分钟数据
name;timestamp;activity
Charles;10.10.18 12:31;drinks
Charles;10.10.18 12:51;sleep
Charles;10.10.18 13:01;mouse
Valentine;10.10.18 12:31;drinks
Valentine;10.10.18 12:51;sleep
Valentine;10.10.18 13:01;purr
我想要的输出应该是这样的:
name timestamp activity
Charles 10.10.18 12:31 drinks
Charles 10.10.18 12:32 drinks
Charles 10.10.18 12:33 drinks
Charles 10.10.18 12:34 drinks
Charles 10.10.18 12:35 drinks
Charles 10.10.18 12:36 drinks
Charles 10.10.18 12:37 drinks
Charles 10.10.18 12:38 drinks
Charles 10.10.18 12:39 drinks
Charles 10.10.18 12:40 drinks
Charles 10.10.18 12:41 drinks
Charles 10.10.18 12:42 drinks
Charles 10.10.18 12:43 drinks
Charles 10.10.18 12:44 drinks
Charles 10.10.18 12:45 drinks
Charles 10.10.18 12:46 drinks
Charles 10.10.18 12:47 drinks
Charles 10.10.18 12:48 drinks
Charles 10.10.18 12:49 drinks
Charles 10.10.18 12:50 drinks
Charles 10.10.18 12:51 sleeps
Charles 10.10.18 12:52 sleeps
Charles 10.10.18 12:53 sleeps
Charles 10.10.18 12:54 sleeps
Charles 10.10.18 12:55 sleeps
Charles 10.10.18 12:56 sleeps
Charles 10.10.18 12:57 sleeps
Charles 10.10.18 12:58 sleeps
Charles 10.10.18 12:59 sleeps
Charles 10.10.18 13:00 sleeps
Charles 10.10.18 13:01 mouse
Valentine 10.10.18 12:31 drinks
Valentine 10.10.18 12:32 drinks
Valentine 10.10.18 12:33 drinks
Valentine 10.10.18 12:34 drinks
Valentine 10.10.18 12:35 drinks
Valentine 10.10.18 12:36 drinks
Valentine 10.10.18 12:37 drinks
Valentine 10.10.18 12:38 drinks
Valentine 10.10.18 12:39 drinks
Valentine 10.10.18 12:40 drinks
Valentine 10.10.18 12:41 drinks
Valentine 10.10.18 12:42 drinks
Valentine 10.10.18 12:43 drinks
Valentine 10.10.18 12:44 drinks
Valentine 10.10.18 12:45 drinks
Valentine 10.10.18 12:46 drinks
Valentine 10.10.18 12:47 drinks
Valentine 10.10.18 12:48 drinks
Valentine 10.10.18 12:49 drinks
Valentine 10.10.18 12:50 drinks
Valentine 10.10.18 12:51 sleeps
Valentine 10.10.18 12:52 sleeps
Valentine 10.10.18 12:53 sleeps
Valentine 10.10.18 12:54 sleeps
Valentine 10.10.18 12:55 sleeps
Valentine 10.10.18 12:56 sleeps
Valentine 10.10.18 12:57 sleeps
Valentine 10.10.18 12:58 sleeps
Valentine 10.10.18 12:59 sleeps
Valentine 10.10.18 13:00 sleeps
Valentine 10.10.18 13:01 purr
使用
data.resample('60S').pad()
不起作用,因为 Pandas 指出时间戳不是唯一的。
每次为一只猫设置子集数据并没有多大帮助。
解决方案
你肯定是在正确的轨道上pad
。唯一需要注意的是:
- 为了对时间序列进行重新采样,您需要数据框索引包含要重新采样的时间。
- 每当您需要拆分数据以便对每个名称进行不同的处理时,
groupby
就是您的朋友。 - 在对组执行操作时,生成的时间序列将用于分组的列作为其索引的(一部分),因此 , , 和 的某种组合
reset_index
通常set_index
可unstack
用于stack
将结果按摩成所需的形式(但如果您不要介意输出与您想要的输出略有不同,您可以跳过这部分)。
因此,你可以让
df['timestamp'] = pd.to_datetime(df['timestamp'])
df.set_index('timestamp').groupby('name').resample('T').pad().activity.reset_index()
在实践中:
In [54]: df
Out[54]:
name timestamp activity
0 Charles 2018-10-10 12:31:00 drinks
1 Charles 2018-10-10 12:51:00 sleep
2 Charles 2018-10-10 13:01:00 mouse
3 Valentine 2018-10-10 12:31:00 drinks
4 Valentine 2018-10-10 12:51:00 sleep
5 Valentine 2018-10-10 13:01:00 purr
In [91]: df.set_index('timestamp').groupby('name').resample('T').pad().activity.reset_index().head()
Out[91]:
name timestamp activity
0 Charles 2018-10-10 12:31:00 drinks
1 Charles 2018-10-10 12:32:00 drinks
2 Charles 2018-10-10 12:33:00 drinks
3 Charles 2018-10-10 12:34:00 drinks
4 Charles 2018-10-10 12:35:00 drinks
推荐阅读
- java - QueryBuilder 加入和排序?
- javascript - PhpStorm:在没有脚本标签的情况下重新格式化 JavaScript
- python - 如何通过python在屏幕上的bash上启动命令
- python - 如何修复python中的未定义错误?
- php - 使用 header() 后在 PHP 中设置 http_response_code() 会阻止页面加载
- c# - C# Newtonsoft JSON - 使用未知对象的集合反序列化对象
- android - 如何更改 Room 数据库的主键
- sql - PROC-SQL - 仅返回具有最小日期值的行
- python - 如何修复'AssertionError:所有表达式都应该是列'?
- java - 尝试使用重复的属性名称解析 xml