没有合适的资源?快使用搜索试试~ 我知道了~
首页利用Pandas和Numpy按时间戳将数据以Groupby方式分组
首先说一下需求,我需要将数据以分钟为单位进行分组,然后每一分钟内的数据作为一行输出,因为不同时间的数据量不一样,所以所有数据按照最长的那组数据为准,不足的数据以各自的最后一个数据进行补足。 之后要介绍一下我的数据源,之前没用的数据列已经去除,我只留下要用到的数据data列和时间戳time列,时间戳是以秒计的,可以看到一共是407454行。 data time 0 6522.50 1.530668e+09 1 6522.66 1.530668e+09 2 6523.79 1.530668e+09 3 6523.79 1.530668e+09 4
资源详情
资源评论
资源推荐

利用利用Pandas和和Numpy按时间戳将数据以按时间戳将数据以Groupby方式分组方式分组
首先说一下需求,我需要将数据以分钟为单位进行分组,然后每一分钟内的数据作为一行输出,因为不同时间的数据量不一
样,所以所有数据按照最长的那组数据为准,不足的数据以各自的最后一个数据进行补足。
之后要介绍一下我的数据源,之前没用的数据列已经去除,我只留下要用到的数据data列和时间戳time列,时间戳是以秒计
的,可以看到一共是407454行。
data time
0 6522.50 1.530668e+09
1 6522.66 1.530668e+09
2 6523.79 1.530668e+09
3 6523.79 1.530668e+09
4 6524.82 1.530668e+09
5 6524.35 1.530668e+09
6 6523.66 1.530668e+09
7 6522.64 1.530668e+09
8 6523.25 1.530668e+09
9 6523.88 1.530668e+09
10 6525.30 1.530668e+09
11 6525.70 1.530668e+09
... ... ...
407443 6310.69 1.531302e+09
407444 6310.55 1.531302e+09
407445 6310.42 1.531302e+09
407446 6310.40 1.531302e+09
407447 6314.03 1.531302e+09
407448 6314.04 1.531302e+09
407449 6312.84 1.531302e+09
407450 6312.57 1.531302e+09
407451 6312.56 1.531302e+09
407452 6314.04 1.531302e+09
407453 6314.04 1.531302e+09
[407454 rows x 2 columns]
开始进行数据处理,定义一个函数,输入为一个DataFrame和时间列的命名。
def getdata_time(dataframe,name):
dataframe[name] = dataframe[name]/60 #将时间转换为分钟
dataframe[name] = dataframe[name].astype('int64')
datalen = dataframe.groupby(name).count().max() #获取数据最大长度
timeframe = dataframe.groupby(name).count().reset_index()#为了获取时间将分组后时间转换为DataFrame
timeseries = timeframe['time']
array = [] #建立一个空数组以便存值
for time, group in dataframe.groupby(name):
tmparray = numpy.array(group['data']) #将series转换为数组并添加到总数组中
array.append(tmparray)
notimedata = pandas.DataFrame(array)
notimedata = notimedata.fillna(method='ffill',axis = 1,limit=datalen[0]) #将缺失值补全
notimedata[datalen[0]+1] = timeseries #把时间添加到最后一列
return notimedata
下面将逐行进行分析,首先要以每分钟为依据进行分组,那么将秒计的时间戳除以60变为分钟,转换为int型是为了观察方便
(更改类型是否会导致数据精度缺失影响结果并不清楚,如果有了解的人看到欢迎指出,谢谢)。
datalen是我们要用到的每分钟中最大的数据长度,用来作为标齐依据。DataFrame.groupby.count()是分别显示每组数据的个
数,并不是显示有多少个分组,如果想要获取分组后每一组的index就需要用到下一行的reset_index方法,之所以不直接用
reset_index而是在count()方法后调用是因为groupby分组后的结果不是一个DataFrame,而经过count()(不仅仅是count,对
分组数据操作的方法都可以,只要得出的结果是与每一组的index一一对应即可)操作后就可以得到一个以index为一列,另一
列是count结果的DataFrame。以下为直接进行reset_index操作的报错:
AttributeError: Cannot access callable attribute ‘reset_index’ of ‘DataFrameGroupBy’ objects, try using the ‘apply’
method
以下为经过count操作后的reset_index方法显示结果,可以看到一共分为了10397组:

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0