如何解决Pandas:是否可以对分类列进行下采样?
让我们有一个 DataFrame log 这样的:
>>> 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
其中 state 列可以是 0 或 1(或缺失)。如果用 UInt8(支持
>>> 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() 方法仅适用于数值数据。
这是完全合理的 - 然而 - 我可以想象一个对分类数据的下采样和平均过程,只要组中的数据保持相同,结果就会是那个特定的值,否则结果将是 ,比如:
categorical_average(['aple','aple']) -> 'aple'
categorical_average(['pear','pear']) -> 'pear'
categorical_average(['aple','pear']) -> <NA>
对于呈现的 DataFrame log 和 category state 列将导致:
>>> 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()
是因为还有很多其他(数字)列,在这些列中它非常有意义,为了简单起见,我没有在这里明确提到它。
解决方法
使用自定义函数测试是否具有 if-else
的唯一值:
f = lambda x: x.iat[0] if len(x) > len(set(x)) else pd.NA
a = log.resample(dt.timedelta(minutes=2)).agg({'state':f})
print (a)
state
date_time
2020-01-01 00:00:00 0
2020-01-01 00:02:00 <NA>
2020-01-01 00:04:00 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。