Pandas time series and grouped aggregation

#time series 
import pandas as pd import numpy as np # generate a time range ''' This function is mainly used to generate a time index with a fixed frequency. When calling the constructor, you must specify the two parameter values ​​in start, end and periods, otherwise an error will be reported. Time series frequency: D Every day of the calendar day B Every day of the working day H Every hour T or min every minute S per second L or ms U M BM MS BMS every millisecond per microsecond end of calendar day end-of-month date on weekdays Date of the beginning of the calendar day start date of the weekday ''' date = pd.date_range(start='20190501',end='20190530') print(date) print("-"*20) #freq: date offset, the value is string or DateOffset, the default is 'D', freq='1h30min' freq='10D' # periods: fixed period, the value is an integer or None date = pd.date_range(start='20190501',periods=10,freq='10D') print(date) print("-"*20) #The role of time series in dataFrame # can use time as an index index = pd.date_range(start='20190101',periods=10) df = pd.Series(np.random.randint(0,10,size = 10),index=index) print(df) print("-"*20) long_ts = pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2019',periods=1000)) print(long_ts) print("-"*20) #Get by year result = long_ts['2020'] print(result) print("-"*20) #year and date get result = long_ts['2020-05'] print(result) print("-"*20) # use slice result = long_ts['2020-05-01':'2020-05-06'] print(result) print("-"*20) #Return the dataset in the specified time period through between_time() index=pd.date_range("2018-03-17","2018-03-30",freq="2H") ts = pd.Series(np.random.randn(157),index=index) print(ts.between_time("7:00","17:00")) print("-"*20) #These operations also apply to dataframes index=pd.date_range('1/1/2019',periods=100) df = pd.DataFrame(np.random.randn(100,4),index=index) print(df.loc['2019-04']) output: /Users/lazy/PycharmProjects/matplotlib/venv/bin/python /Users/lazy/PycharmProjects/matplotlib/drawing.py DatetimeIndex(['2019-05-01', '2019-05-02', '2019-05-03', '2019-05-04', '2019-05-05', '2019-05-06', '2019-05-07', '2019-05-08', '2019-05-09', '2019-05-10', '2019-05-11', '2019-05-12', '2019-05-13', '2019-05-14', '2019-05-15', '2019-05-16', '2019-05-17', '2019-05-18', '2019-05-19', '2019-05-20', '2019-05-21', '2019-05-22', '2019-05-23', '2019-05-24', '2019-05-25', '2019-05-26', '2019-05-27', '2019-05-28', '2019-05-29', '2019-05-30'], dtype='datetime64[ns]', freq='D') -------------------- DatetimeIndex(['2019-05-01', '2019-05-11', '2019-05-21', '2019-05-31', '2019-06-10', '2019-06-20', '2019-06-30', '2019-07-10', '2019-07-20', '2019-07-30'], dtype='datetime64[ns]', freq='10D') -------------------- 2019-01-01 9 2019-01-02 8 2019-01-03 9 2019-01-04 2 2019-01-05 4 2019-01-06 4 2019-01-07 0 2019-01-08 1 2019-01-09 4 2019-01-10 1 Freq: D, dtype: int64 -------------------- 2019-01-01 1.161118 2019-01-02 0.342857 2019-01-03 1.581292 2019-01-04 -0.928493 2019-01-05 -1.406328 ... 2021-09-22 0.106048 2021-09-23 0.228015 2021-09-24 -0.201558 2021-09-25 1.136008 2021-09-26 -0.947871 Freq: D, Length: 1000, dtype: float64 -------------------- 2020-01-01 1.828810 2020-01-02 1.425193 2020-01-03 -0.258607 2020-01-04 -0.390869 2020-01-05 -0.509062 ... 2020-12-27 0.155428 2020-12-28 -0.450071 2020-12-29 -0.050287 2020-12-30 0.033996 2020-12-31 -0.783760 Freq: D, Length: 366, dtype: float64 -------------------- 2020-05-01 0.843815 2020-05-02 -0.189866 2020-05-03 0.206807 2020-05-04 -0.279099 2020-05-05 0.575256 2020-05-06 -0.163009 2020-05-07 -0.850285 2020-05-08 -0.602792 2020-05-09 -0.630393 2020-05-10 -1.447383 2020-05-11 0.664726 2020-05-12 -0.108902 2020-05-13 0.333349 2020-05-14 1.068075 2020-05-15 -0.004767 2020-05-16 0.178172 2020-05-17 1.189467 2020-05-18 2.149068 2020-05-19 0.501122 2020-05-20 0.025200 2020-05-21 0.459819 2020-05-22 -0.688207 2020-05-23 -0.560723 2020-05-24 -0.448853 2020-05-25 0.612620 2020-05-26 0.781641 2020-05-27 0.225619 2020-05-28 -0.026749 2020-05-29 -0.020273 2020-05-30 0.812233 2020-05-31 -1.258738 Freq: D, dtype: float64 -------------------- 2020-05-01 0.843815 2020-05-02 -0.189866 2020-05-03 0.206807 2020-05-04 -0.279099 2020-05-05 0.575256 2020-05-06 -0.163009 Freq: D, dtype: float64 -------------------- 2018-03-17 08:00:00 0.704187 2018-03-17 10:00:00 0.496051 2018-03-17 12:00:00 1.828923 2018-03-17 14:00:00 -0.096337 2018-03-17 16:00:00 1.584530 ... 2018-03-29 08:00:00 0.779002 2018-03-29 10:00:00 -0.244056 2018-03-29 12:00:00 -0.428603 2018-03-29 14:00:00 1.297126 2018-03-29 16:00:00 0.482789 Length: 65, dtype: float64 -------------------- 0 1 2 3 2019-04-01 -2.074822 -0.939817 0.321402 -0.627823 2019-04-02 1.368356 0.150809 1.102027 -0.286527 2019-04-03 0.422506 -0.024193 -0.857528 1.061103 2019-04-04 -0.324066 -0.764358 -0.586841 1.520979 2019-04-05 1.398816 1.088023 -0.940833 1.249962 2019-04-06 -0.031951 0.905921 0.455782 -0.968012 2019-04-07 1.421253 -0.786199 0.875216 0.551437 2019-04-08 1.015066 -1.051041 0.430193 -0.014169 2019-04-09 0.279851 0.824598 -0.606735 -1.411600 2019-04-10 -0.252020 -0.408230 -0.698608 0.158843

 
import pandas as pd 
import numpy as np

ts = pd.Series(np.random.randn(10),index=pd.date_range('1/1/2019',periods=10))
print(ts)
print("- "*20)
# Move the data, the index remains unchanged, and is filled by NaN by default
# periods: The negative number of digits moved is moved up
# fill_value: fill data after moving
print(ts.shift(periods=2,fill_value=100))
print ("-"*20)
# Shift the index by tshift() by the specified time:
print(ts.tshift(2))
print("-"*20)
# Convert timestamp to time root
print(pd.to_datetime( 1554970740000,unit='ms'))
print("-"*20)
# utc is Coordinated Universal Time, and the time zone is expressed in the form of an offset from UTC, but note that setting utc=True is to let the pandas object have a time zone Nature, for a column to be converted, it will cause a conversion error
# unit='ms' The setting granularity is to the millisecond level
print(pd.to_datetime(1554970740000, unit='ms').tz_localize('UTC').tz_convert('Asia/Shanghai'))
print("-"*20)
# Process a column
df = pd.DataFrame([1554970740000, 1554970800000, 1554970860000],columns = ['time_stamp'])
print(pd.to_datetime(df['time_stamp'],unit='ms').dt.tz_localize(' UTC').dt.tz_convert('Asia/Shanghai')) #First assign the standard time zone, and then convert to the East Eighth District
print("-"*20)
# Process Chinese
print(pd.to_datetime('October 10, 2019) day', format='%Y year %m month %d day'))
output:
/Users/lazy/PycharmProjects/matplotlib/venv/bin/python /Users/lazy/PycharmProjects/matplotlib/drawing.py
2019-01- 01 -2.679356
2019-01-02 0.775274
2019-01-03 -0.045711
2019-01-04 0.883532
2019-01-05-0.941213 2019-01-06
-1.461701
2019-01-07 0.149344
2019-01-08 -0.185037
2019 -01-09 -0.754532
2019-01-10 0.561909
Freq: D, dtype: float64
--------------------
2019-01-01 100.000000
2019-01-02 100.000000
2019-01-03 -2.679356
2019-01-04 0.775274
2019-01-05 -0.045711
2019-01-06 0.883532
2019-01-07 -0.941213
2019-01-08 -1.461701
2019-01-09 0.149344
2019-01-10 -0.185037
Freq: D, dtype: float64
--------------------
2019-01-03 -2.679356
2019-01-04 0.775274
2019-01-05 -0.045711
2019-01-06 0.883532
2019-01-07 -0.941213
2019-01-08 -1.461701
2019-01-09 0.149344
2019-01-10 -0.185037
2019-01-11 -0.754532
2019-01-12 0.561909
Freq: D, dtype: float64
--------------------
2019-04-11 08:19:00
--------------------
2019-04-11 16:19:00+08:00
--------------------
0 2019-04-11 16:19:00+08:00
1 2019-04-11 16:20:00+08:00
2 2019-04-11 16:21:00+08:00
Name: time_stamp, dtype: datetime64[ns, Asia/Shanghai]
--------------------
2019-10-10 00:00:00