让我们有一个这样的 DataFrame日志:
>>> log
state
date_time
2020-01-01 00:00:00 0
2020-01-01 00:01:00 0
2020-01-01 00:02:00 0
2020-01-01 00:03:00 1
2020-01-01 00:04:00 1
2020-01-01 00:05:00 1
其中状态列可以是 0 或 1(或缺失)。如果用 UInt8(支持 <NA> 的最小数字数据类型)表示,可以像这样对数据进行下采样:
>>> log.resample(dt.timedelta(minutes=2)).mean()
state
date_time
2020-01-01 00:00:00 0.0
2020-01-01 00:02:00 0.5
2020-01-01 00:04:00 1.0
重采样工作得很好,只有值 0.5 没有意义,因为它只能是 0 或 1。出于同样的原因,使用category作为该列的 dtype 是有意义的。但是,在这种情况下,重采样将不起作用,因为mean()方法仅适用于数值数据。
这很有意义 - 但是 - 我可以想象一个对分类数据进行下采样和平均的过程,只要组中的数据保持相同,结果将是那个特定值,否则结果将是 <NA>,喜欢:
categorical_average(['aple', 'aple']) -> 'aple'
categorical_average(['pear', 'pear']) -> 'pear'
categorical_average(['aple', 'pear']) -> <NA>
对于呈现的具有类别状态列的 DataFrame日志,将导致:
>>> log.resample(dt.timedelta(minutes=2)).probably_some_other_method()
state
date_time
2020-01-01 00:00:00 0
2020-01-01 00:02:00 <NA>
2020-01-01 00:04:00 1
顺便说一句,我这样做resample.main()
是因为还有许多其他(数字)列,这很有意义,为了简单起见,我只是没有在这里明确提到它。