介绍
这篇文章将为大家详细讲解有关使用熊猫怎么根据日期做分组运算,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
原始数据
TS PERIOD REQUEST STEPPED VALUE STATUS 秒 20-DEC-16 00:00:00.0 600, 1, 0,, 2.018, 0, 1482163200 20-DEC-16 00:01:00.0 600, 1, 0,, 2.019, 0, 1482163260 20-DEC-16 00:02:00.0 600, 1, 0,, 2.019, 0, 1482163320 20-DEC-16 00:03:00.0 600, 1, 0,, 2.019, 0, 1482163380 20-DEC-16 00:04:00.0 600, 1, 0,, 2.019, 0, 1482163440 20-DEC-16 00:05:00.0 600, 1, 0,, 2.020, 0, 1482163500 20-DEC-16 00:06:00.0 600, 1, 0,, 2.020, 0, 1482163560
我们的目标是把TS列从
20-DEC-16 00:00:00.0
转变为
20-DEC-16
的格式,然后按天取均值。
导入包
import numpy as np 得到pandas import DataFrame系列 import pandas  as pd 得到datetime import  datetime
读入文件
df =, pd.read_csv(& # 39;数据/用法# 39;,9=& # 39;\ t # 39;)
这里没有解决中文路径名和绝对路径的问题。
转化为数据框
df =, DataFrame (df)
转化为时间格式
将TS列转化为时间格式,并保存为新的一列日期,之后,只留下日期和价值两列,其他统统不要。
df(& # 39;日期# 39;],=,pd.to_datetime (df (& # 39; TS # 39;]) df =, df[[& # 39;日期# 39;& # 39;价值# 39;]]
关键一步
把形如“2017-9-4就是# 39;转化”为2017-9-4 & # 39;
df(& # 39;日期# 39;],=,(datetime.strftime (x, & # 39; Y - % - % d % # 39;), for x 拷贝df(& # 39;日期# 39;]]
strftime有若干参数,其中Y表示四位数的年,米表示两位数的月。
旋转数据框
df =df.pivot_table(指数=& # 39;日期# 39;,aggfunc=& # 39;意味着# 39;)
<强>补充:利用熊猫和Numpy按时间戳将数据以Groupby方式分组强>
首先说一下需求,我需要将数据以分钟为单位进行分组,然后每一分钟内的数据作为一行输出,因为不同时间的数据量不一样,所以所有数据按照最长的那组数据为准,不足的数据以各自的最后一个数据进行补足。
之后要介绍一下我的数据,源之前没用的数据列已经去除,我只留下要用到的数据数据列和时间时间戳列,时间戳是以秒计的,可以看到一共是407454行。
,, data ,,时间 0,6522.50,1.530668 e + 09年 1,6522.66,1.530668 e + 09年 2,6523.79,1.530668 e + 09年 3,6523.79,1.530668 e + 09年 4,6524.82,1.530668 e + 09年 5,6524.35,1.530668 e + 09年 6,6523.66,1.530668 e + 09年 7,6522.64,1.530668 e + 09年 8,6523.25,1.530668 e + 09年 9日,6523.88,1.530668 e + 09年 10,6525.30,1.530668 e + 09年 11日,6525.70,1.530668 e + 09年 ,,,,,,,,… 407443,6310.69,1.531302 e + 09年 407444,6310.55,1.531302 e + 09年 407445,6310.42,1.531302 e + 09年 407446,6310.40,1.531302 e + 09年 407447,6314.03,1.531302 e + 09年 407448,6314.04,1.531302 e + 09年 407449,6312.84,1.531302 e + 09年 407450,6312.57,1.531302 e + 09年 407451,6312.56,1.531302 e + 09年 407452,6314.04,1.531302 e + 09年 407453,6314.04,1.531302 e + 09年 , (407454,rows x 2,列)
开始进行数据处理,定义一个函数、输入为一个DataFrame和时间列的命名。
def getdata_time (DataFrame、名称): ,dataframe[名字],=,dataframe[名字]/60,#将时间转换为分钟 ,dataframe[名字],=,dataframe[名字].astype (& # 39; int64& # 39;),=,,datalen  dataframe.groupby(名字).count () .max(),, #获取数据最大长度,=,,timeframe  dataframe.groupby(名字).count () .reset_index() #为了获取时间将分组后时间转换为DataFrame=,timeseries 拖延时间(& # 39;时间# 39;),=,array [],, #建立一个空数组以便存值 ,for 时间,group 拷贝dataframe.groupby(名称):,=,,tmparray  numpy.array(集团[& # 39;数据# 39;]),#将系列转换为数组并添加到总数组中 ,array.append (tmparray),=,,notimedata  pandas.DataFrame(数组)=,,notimedata  notimedata.fillna(方法=& # 39;ffill& # 39;, axis =, 1,限制=datalen[0]), #将缺失值补全 ,notimedata [datalen [0] + 1],=, timeseries #把时间添加到最后一列, null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null使用熊猫怎么根据日期做分组运算