Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:有可能把样本分类列写下来吗?_Python_Pandas_Categorical Data_Pandas Resample - Fatal编程技术网

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