python - 在 Python 中按时间序列箱对项目进行分组

标签 python binning

我的数据如下所示:

[[datetime1, label1],
 [datetime2, label2],
 [datetime3, label3]]

标签是字符串。我有一个分箱参数 (delta),它是一个 datetime.timedelta。

我正在尝试做的事情:

  1. 提出一组日期时间 bin,按 delta 等间隔。换句话说,在下面,datetimebin2 - datetimebin1 = datetimebin3 - datetimebin2 = delta。
  2. 将标签放入这些容器中。

所以我最终会得到这样的东西:

[[datetimebin1, [label1, label2],
 [datetimebin2, []],
 [datetimebin3, []],
 [datetimebin4, [label3]]

有人向我指出 pandas,但没有找到我要找的东西。非常感谢任何帮助!

最佳答案

我认为@DrV 是正确的答案,但我已经准备了一个示例,试图展示如何使用 Pandas 实现类似的事情:

import numpy
import pandas
import datetime
import time

# Binning delta

delta = datetime.timedelta(hours=1)

# Sample data

sample = [
    ['2014-08-09 16:30:00', 'label1'],
    ['2014-08-09 15:30:00', 'label2'],
    ['2014-08-09 14:30:00', 'label3'],
    ['2014-08-09 14:00:00', 'label4']
]

# Create dataframe and append UNIX timestamp column

df = pandas.DataFrame(sample)
df.columns = ['Datetime', 'Label']
df['Datetime'] = pandas.to_datetime(df['Datetime'])
df['UnixStamp'] = df['Datetime'].apply(lambda d: time.mktime(d.timetuple()))
df = df.set_index('Datetime')

# Calculate bins

bins = numpy.arange(min(df['UnixStamp']), max(df['UnixStamp']) + delta.seconds, delta.seconds)

# Group columns by datetime bin

def bin_from_tstamp(tstamp):

    diffs = [abs(tstamp - bin) for bin in bins]
    return bins[diffs.index(min(diffs))]

grouped = df.groupby(df['UnixStamp'].map(
    lambda t: datetime.datetime.fromtimestamp(bin_from_tstamp(t))
))

此时 grouped 包含按日期时间 bin 分组的数据集。

以下是打印 grouped.groups 的结果(其中键是日期时间 bin,值是分组的日期时间):

{
    numpy.datetime64('2014-08-09T18:00:00.000000000+0200'): [
        Timestamp('2014-08-09 16:30:00')
    ], 
    numpy.datetime64('2014-08-09T17:00:00.000000000+0200'): [
        Timestamp('2014-08-09 15:30:00')
    ], 
    numpy.datetime64('2014-08-09T16:00:00.000000000+0200'): [
        Timestamp('2014-08-09 14:30:00'), 
        Timestamp('2014-08-09 14:00:00'
    ]
}

关于python - 在 Python 中按时间序列箱对项目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25219015/

相关文章:

python - 如何滚动浏览(大量)pandas 数据框?

python pandas.Series.str.包含带空格的单词

python - 添加具有相同 bin 分配的 numpy 数组元素/切片

python - 二维 np.digitize

Python:根据这些分箱对一个坐标进行分箱并平均另一个坐标

python - 使用 tweepy 和 pyspark 流式传输 Twitter

python - 如何使用 SqlAlchemy ORM 以一对多关系连接 2 个表并从其他表获取最新记录

python - 在 Windows 操作系统上通过 Waitress 猎鹰

python - 基于 groupby 和 binning 将数据帧拆分为多个数据帧

r - 在传递到 `geom_spoke` 之前汇总 2D bin 中的 X、Y、theta 数据