最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用pandas按日期做分組運算的操作

 更新時間:2021年03月26日 11:33:10   作者:UMVUE  
這篇文章主要介紹了利用pandas按日期做分組運算的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

原始數(shù)據(jù)

TS PERIOD REQUEST STEPPED VALUE STATUS SECONDS
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

轉(zhuǎn)變?yōu)?/p>

20-DEC-16

的格式,然后按天取均值。

導入包

import numpy as np
from pandas import DataFrame, Series
import pandas as pd
from datetime import datetime

讀入文件

df = pd.read_csv('data/test.txt',sep='\t')

這里沒有解決中文路徑名和絕對路徑的問題.

轉(zhuǎn)化為數(shù)據(jù)框

df = DataFrame(df)

轉(zhuǎn)化為時間格式

將TS列轉(zhuǎn)化為時間格式,并保存為新的一列DATE,之后,只留下DATE和VALUE兩列,其他統(tǒng)統(tǒng)不要。

df['DATE'] = pd.to_datetime(df['TS'])
df = df[['DATE','VALUE']]

關(guān)鍵一步

把形如‘2017-9-4 00:00:00'轉(zhuǎn)化為‘2017-9-4 '

df['DATE'] = [datetime.strftime(x,'%Y-%m-%d') for x in df['DATE']]

strftime有若干參數(shù),其中Y表示四位數(shù)的年,m表示兩位數(shù)的月。

旋轉(zhuǎn)數(shù)據(jù)框

df =df.pivot_table(index='DATE',aggfunc='mean')

補充:利用Pandas和Numpy按時間戳將數(shù)據(jù)以Groupby方式分組

首先說一下需求,我需要將數(shù)據(jù)以分鐘為單位進行分組,然后每一分鐘內(nèi)的數(shù)據(jù)作為一行輸出,因為不同時間的數(shù)據(jù)量不一樣,所以所有數(shù)據(jù)按照最長的那組數(shù)據(jù)為準,不足的數(shù)據(jù)以各自的最后一個數(shù)據(jù)進行補足。

之后要介紹一下我的數(shù)據(jù)源,之前沒用的數(shù)據(jù)列已經(jīng)去除,我只留下要用到的數(shù)據(jù)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]

開始進行數(shù)據(jù)處理,定義一個函數(shù),輸入為一個DataFrame和時間列的命名。

def getdata_time(dataframe,name):
 dataframe[name] = dataframe[name]/60 #將時間轉(zhuǎn)換為分鐘
 dataframe[name] = dataframe[name].astype('int64') 
 datalen = dataframe.groupby(name).count().max()  #獲取數(shù)據(jù)最大長度 
 timeframe = dataframe.groupby(name).count().reset_index()#為了獲取時間將分組后時間轉(zhuǎn)換為DataFrame
 timeseries = timeframe['time'] 
 array = []  #建立一個空數(shù)組以便存值

 for time, group in dataframe.groupby(name): 
 tmparray = numpy.array(group['data']) #將series轉(zhuǎn)換為數(shù)組并添加到總數(shù)組中
 array.append(tmparray) 
 notimedata = pandas.DataFrame(array)
 notimedata = notimedata.fillna(method='ffill',axis = 1,limit=datalen[0]) #將缺失值補全
 notimedata[datalen[0]+1] = timeseries #把時間添加到最后一列 
 return notimedata

下面將逐行進行分析,首先要以每分鐘為依據(jù)進行分組,那么將秒計的時間戳除以60變?yōu)榉昼姡D(zhuǎn)換為int型是為了觀察方便(更改類型是否會導致數(shù)據(jù)精度缺失影響結(jié)果并不清楚,如果有了解的人看到歡迎指出,謝謝)。

datalen是我們要用到的每分鐘中最大的數(shù)據(jù)長度,用來作為標齊依據(jù)。DataFrame.groupby.count()是分別顯示每組數(shù)據(jù)的個數(shù),并不是顯示有多少個分組,如果想要獲取分組后每一組的index就需要用到下一行的reset_index方法,之所以不直接用reset_index而是在count()方法后調(diào)用是因為groupby分組后的結(jié)果不是一個DataFrame,而經(jīng)過count()(不僅僅是count,對分組數(shù)據(jù)操作的方法都可以,只要得出的結(jié)果是與每一組的index一一對應(yīng)即可)操作后就可以得到一個以index為一列,另一列是count結(jié)果的DataFrame。

以下為直接進行reset_index操作的報錯:

AttributeError: Cannot access callable attribute 'reset_index' of 'DataFrameGroupBy' objects, try using the 'apply' method

以下為經(jīng)過count操作后的reset_index方法顯示結(jié)果,可以看到一共分為了10397組:

   time data
0  25511135 33
1  25511136 18
2  25511137 25
3  25511138 42
4  25511139 36
5  25511140  7
6  25511141 61
7  25511142 45
8  25511143 46
9  25511144 19
10  25511145 21
...   ... ...
10387 25521697  3
10388 25521698  9
10389 25521699 16
10390 25521700 13
10391 25521701  4
10392 25521702 34
10393 25521703 124
10394 25521704 302
10395 25521705 86
10396 25521706 52
 
[10397 rows x 2 columns]

提取的timeseries將在最后數(shù)據(jù)整合時使用。

現(xiàn)在開始將每組數(shù)據(jù)提取,首先建立一個空的數(shù)組用來存放,然后利用for循環(huán)獲取每一組的信息,time即為分組的index,group即為每一分組的內(nèi)容,將數(shù)據(jù)從group['data']中取出并添加到之前建立的空數(shù)組里,循環(huán)操作過后轉(zhuǎn)換為DataFrame,當然這個DataFrame中包含了大量缺失值,因為它的列數(shù)是以最長的數(shù)據(jù)為準。

如下:

   0  1  2  3  ... 1143 1144 1145 1146
0  6522.50 6522.66 6523.79 6523.79 ... NaN NaN NaN NaN
1  6523.95 6524.90 6525.00 6524.35 ... NaN NaN NaN NaN
2  6520.87 6520.00 6520.45 6520.46 ... NaN NaN NaN NaN
3  6516.34 6516.26 6516.21 6516.21 ... NaN NaN NaN NaN
4  6513.28 6514.00 6514.00 6514.00 ... NaN NaN NaN NaN
5  6511.98 6511.98 6511.99 6513.00 ... NaN NaN NaN NaN
6  6511.00 6511.00 6511.00 6511.00 ... NaN NaN NaN NaN
7  6511.70 6511.78 6511.99 6511.99 ... NaN NaN NaN NaN
8  6509.51 6510.00 6510.80 6510.80 ... NaN NaN NaN NaN
9  6511.36 6510.00 6510.00 6510.00 ... NaN NaN NaN NaN
10  6507.00 6507.00 6507.00 6507.00 ... NaN NaN NaN NaN
...  ...  ...  ...  ... ... ... ... ... ...
10386 6333.77 6331.31 6331.30 6333.19 ... NaN NaN NaN NaN
10387 6331.68 6331.30 6331.68  NaN ... NaN NaN NaN NaN
10388 6331.30 6331.30 6331.00 6331.00 ... NaN NaN NaN NaN
10389 6330.93 6330.92 6330.92 6330.93 ... NaN NaN NaN NaN
10390 6330.83 6330.83 6330.90 6330.80 ... NaN NaN NaN NaN
10391 6327.57 6326.00 6326.00 6325.74 ... NaN NaN NaN NaN
10392 6327.57 6329.70 6328.85 6328.85 ... NaN NaN NaN NaN
10393 6323.54 6323.15 6323.15 6322.77 ... NaN NaN NaN NaN
10394 6311.00 6310.83 6310.83 6310.50 ... NaN NaN NaN NaN
10395 6311.45 6311.32 6310.01 6310.01 ... NaN NaN NaN NaN
10396 6310.46 6310.46 6310.56 6311.61 ... NaN NaN NaN NaN
 
[10397 rows x 1147 columns]

可以看到行數(shù)是分組個數(shù),一共1147列也是最多的那組數(shù)據(jù)長度。

之后我們通過調(diào)用fillna方法將缺失值進行填充,method='ffill'是指以缺失值前一個數(shù)據(jù)為依據(jù),axis = 1是以行為單位,limit是指最大填充長度。最終,把我們之前取得的timeseries添加到最后一列,就得到了需求的最終結(jié)果。

   0  1  2  ...  1145  1146  1148
0  6522.50 6522.66 6523.79 ...  6522.14 6522.14 25511135
1  6523.95 6524.90 6525.00 ...  6520.00 6520.00 25511136
2  6520.87 6520.00 6520.45 ...  6517.00 6517.00 25511137
3  6516.34 6516.26 6516.21 ...  6514.00 6514.00 25511138
4  6513.28 6514.00 6514.00 ...  6511.97 6511.97 25511139
5  6511.98 6511.98 6511.99 ...  6511.00 6511.00 25511140
6  6511.00 6511.00 6511.00 ...  6510.90 6510.90 25511141
7  6511.70 6511.78 6511.99 ...  6512.09 6512.09 25511142
8  6509.51 6510.00 6510.80 ...  6512.09 6512.09 25511143
9  6511.36 6510.00 6510.00 ...  6507.04 6507.04 25511144
10  6507.00 6507.00 6507.00 ...  6508.57 6508.57 25511145
11  6507.16 6507.74 6507.74 ...  6506.35 6506.35 25511146
...  ...  ...  ... ...   ...  ...  ...
10388 6331.30 6331.30 6331.00 ...  6331.00 6331.00 25521698
10389 6330.93 6330.92 6330.92 ...  6330.99 6330.99 25521699
10390 6330.83 6330.83 6330.90 ...  6327.58 6327.58 25521700
10391 6327.57 6326.00 6326.00 ...  6325.74 6325.74 25521701
10392 6327.57 6329.70 6328.85 ...  6325.00 6325.00 25521702
10393 6323.54 6323.15 6323.15 ...  6311.00 6311.00 25521703
10394 6311.00 6310.83 6310.83 ...  6315.00 6315.00 25521704
10395 6311.45 6311.32 6310.01 ...  6310.00 6310.00 25521705
10396 6310.46 6310.46 6310.56 ...  6314.04 6314.04 25521706
 
[10397 rows x 1148 columns]

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Pandas之MultiIndex對象的示例詳解

    Pandas之MultiIndex對象的示例詳解

    這篇文章主要介紹了Pandas之MultiIndex對象的示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • python3中bytes和string之間的互相轉(zhuǎn)換

    python3中bytes和string之間的互相轉(zhuǎn)換

    這篇文章主要介紹了python3中bytes和string之間的互相轉(zhuǎn)換,文中給出了詳細的介紹和示例代碼,相信對大家具有一定的參考價值,有需要的朋友們下面來一起學習學習吧。
    2017-02-02
  • Python實現(xiàn)日期判斷和加減操作詳解

    Python實現(xiàn)日期判斷和加減操作詳解

    這篇文章主要介紹了如何利用Python實現(xiàn)日期的判斷,以及對日期的加減操作,文中的示例代碼對我們學習或工作有一定的價值,需要的可以參考一下
    2022-01-01
  • Python實現(xiàn)替換文件中指定內(nèi)容的方法

    Python實現(xiàn)替換文件中指定內(nèi)容的方法

    這篇文章主要介紹了Python實現(xiàn)替換文件中指定內(nèi)容的方法,涉及Python文件讀寫、字符串替換等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 利用Python實現(xiàn)讀取Word表格計算匯總并寫入Excel

    利用Python實現(xiàn)讀取Word表格計算匯總并寫入Excel

    這篇文章主要給大家介紹了關(guān)于如何利用Python實現(xiàn)讀取Word表格計算匯總并寫入Excel的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • 解讀卷積神經(jīng)網(wǎng)絡(luò)的人臉識別

    解讀卷積神經(jīng)網(wǎng)絡(luò)的人臉識別

    這篇文章主要介紹了解讀卷積神經(jīng)網(wǎng)絡(luò)的人臉識別問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python中的引用知識點總結(jié)

    Python中的引用知識點總結(jié)

    在本文里我們給大家整理了關(guān)于Python中的引用知識點以及相關(guān)代碼總結(jié),需要的朋友們跟著學習下。
    2019-05-05
  • Python 解決火狐瀏覽器不彈出下載框直接下載的問題

    Python 解決火狐瀏覽器不彈出下載框直接下載的問題

    這篇文章主要介紹了Python 解決火狐瀏覽器不彈出下載框直接下載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python線程、進程和協(xié)程詳解

    python線程、進程和協(xié)程詳解

    Python被人詬病最多的大概就是性能差,在這里講一下 Python 的多進程,多線程與協(xié)程。首先聲明這不是教程,看完這篇文章,大概能夠?qū)?Python 的多進程與多線程有一定的了解。
    2016-07-07
  • python入門turtle庫實現(xiàn)螺旋曲線圖的方法示例

    python入門turtle庫實現(xiàn)螺旋曲線圖的方法示例

    turtle(海龜)是Python重要的標準庫之一,它能夠進行基本的圖形繪制,本文就來介紹了一下python入門turtle庫實現(xiàn)螺旋曲線圖的方法示例,感興趣的可以了解一下
    2021-11-11

最新評論

留坝县| 郧西县| 饶河县| 黑水县| 黄浦区| 安多县| 黑河市| 茶陵县| 昆山市| 长白| 乐至县| 贵溪市| 永宁县| 三江| 安塞县| 西畴县| 马尔康县| 内乡县| 梓潼县| 巴塘县| 富平县| 皋兰县| 甘谷县| 象州县| 柳河县| 陈巴尔虎旗| 梁山县| 阿瓦提县| 英德市| 中阳县| 沁阳市| 乐业县| 鹤庆县| 新闻| 井陉县| 新兴县| 吴堡县| 道真| 翼城县| 深水埗区| 黄龙县|