python - 如何使用离散数据对 Pandas 中的数据进行重新采样?

标签 python pandas dataframe

我被 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 就是您的好 helper 。
  • 对组执行操作时,生成的时间序列将用于分组的列作为其索引(一部分),因此 reset_indexset_index 的某种组合、 unstackstack 通常可用于将结果调整为所需的形式(但如果您不介意输出与所需的输出略有不同,则可能您可以跳过这一部分吗?)。

因此,你可以让

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

关于python - 如何使用离散数据对 Pandas 中的数据进行重新采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904790/

相关文章:

python - 如何删除 Python 中的正则表达式子字符串?

python - 不计算以 float 为底的对数

python - 如何使用 Python 确定驱动器上的文件数?

python - 从数据框中的每一行中删除日期时间字符串

python - 如何将csv文件中的所有列更改为str?

行绑定(bind)数据帧并保持唯一 ID 递增

python - 通过 Pandas 计算每一行与共识的差异

python - 在 pandas DataFrame 中计算每列行中的重复项

python - 使用 PIL 或 cv2 等模块在 python 中捕获屏幕的最有效方法是什么?因为它占用了很多内存

python - 使用先前值填充日期时间之间的重新采样间隙(多索引)