Python 熊猫:有可能把样本分类列写下来吗?
让我们创建一个数据帧日志,例如:Python 熊猫:有可能把样本分类列写下来吗?,python,pandas,categorical-data,pandas-resample,Python,Pandas,Categorical Data,Pandas Resample,让我们创建一个数据帧日志,例如: >>> 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:0
>>> 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(支持的最小数字数据类型)表示,可以如下所示对数据进行下采样:
>>> 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用作此列的数据类型也是有意义的。但是,在这种情况下,重采样将不起作用,因为mean()方法仅适用于数值数据
这是一个很好的解释-然而-我可以想象对分类数据的下采样和平均程序,只要组中的数据保持相同,结果将是该特定值,否则结果将如下所示:
分类平均值(['aple','aple'])->'aple'
分类平均值(['pear','pear'])->'pear'
分类平均值(['aple','pear'])->
对于带有类别状态列的数据帧日志,将导致:
>>> 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
>>log.resample(dt.timedelta(minutes=2))。可能是一些其他方法()
状态
日期和时间
2020-01-01 00:00:00 0
2020-01-01 00:02:00
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
f=lambda x:x.iat[0]如果len(x)>len(set(x))else pd.NA
a=log.resample(dt.timedelta(minutes=2)).agg({'state':f})
印刷品(a)
状态
日期和时间
2020-01-01 00:00:00 0
2020-01-01 00:02:00
2020-01-01 00:04:00 1
谢谢!由于与其他实际缺失值的一致性,我仅将pd.NA更改为np.nan(熊猫中似乎没有nan),因为分类数据使用nan表示缺失值,而IntegerArray使用NA。。。
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