คำนวณความผิดปกติของสภาพภูมิอากาศโดยใช้ข้อมูลพื้นฐาน 30 ปีใน Python

ฉันกำลังพยายามลบอุณหภูมิเฉลี่ย 30 ปีในแต่ละเดือนออกจากข้อมูลอนุกรมเวลาดั้งเดิม อนุกรมเวลาแสดงอุณหภูมิที่สังเกตได้เป็นองศา C ในแต่ละเดือนตั้งแต่ปี 1985-2015

นี่คือสิ่งที่ฉันได้ลองมาแล้ว:

M=pd.read_excel('Temperature.xlsx',1,parse_dates=True, index_col= 'Date')
#this is just a timeseries of Monthly Temperature from 1895-2015
df=M['Temp']  #All of the timeseries
MT=M['Temp']['1981-Jan':'2010-Dec']  #30 Year Timeslice

ฉันสามารถรับค่าเฉลี่ยของแต่ละเดือนโดยใช้:

MTT=MT.groupby(MT.index.strftime("%m")).mean()

ฉันจะลบองค์ประกอบรายเดือนของ MTT ออกจากอนุกรมเวลารายเดือนเดิมได้อย่างไร

ฉันยังลอง:

U=df-df.groupby([df.index.month]).transform('mean')

แต่นี่ทำให้ฉันเห็นความแตกต่างระหว่างค่าเฉลี่ยในแต่ละเดือนของอนุกรมเวลาทั้งหมดกับอนุกรมเวลาดั้งเดิม ฉันพลาดอะไรไป?

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ!

แก้ไข: นี่คือตัวอย่างข้อมูลของฉันตั้งแต่ปี 1895 ถึงสิ้นปี 1939

Date    Temp
1/1/1895    7.72
2/1/1895    5.50
3/1/1895    13.56
4/1/1895    17.83
5/1/1895    20.39
6/1/1895    25.50
7/1/1895    25.89
8/1/1895    25.11
9/1/1895    22.67
10/1/1895   15.83
11/1/1895   10.28
12/1/1895   8.89
1/1/1896    7.56
2/1/1896    8.78
3/1/1896    14.61
4/1/1896    20.11
5/1/1896    26.11
6/1/1896    27.78
7/1/1896    26.00
8/1/1896    25.50
9/1/1896    22.56
10/1/1896   16.11
11/1/1896   11.67
12/1/1896   8.17
1/1/1897    5.06
2/1/1897    10.11
3/1/1897    13.22
4/1/1897    17.06
5/1/1897    21.17
6/1/1897    25.67
7/1/1897    26.61
8/1/1897    24.39
9/1/1897    21.33
10/1/1897   19.17
11/1/1897   12.94
12/1/1897   6.61
1/1/1898    7.33
2/1/1898    10.89
3/1/1898    13.28
4/1/1898    17.56
5/1/1898    22.67
6/1/1898    25.94
7/1/1898    26.33
8/1/1898    24.72
9/1/1898    22.50
10/1/1898   17.44
11/1/1898   9.78
12/1/1898   5.61
1/1/1899    6.11
2/1/1899    5.78
3/1/1899    14.61
4/1/1899    17.33
5/1/1899    23.00
6/1/1899    26.56
7/1/1899    26.61
8/1/1899    26.83
9/1/1899    23.89
10/1/1899   18.28
11/1/1899   12.00
12/1/1899   7.22
1/1/1900    7.94
2/1/1900    8.50
3/1/1900    13.78
4/1/1900    17.22
5/1/1900    23.39
6/1/1900    27.78
7/1/1900    27.00
8/1/1900    26.44
9/1/1900    25.89
10/1/1900   18.72
11/1/1900   12.89
12/1/1900   6.56
1/1/1901    7.94
2/1/1901    9.22
3/1/1901    12.00
4/1/1901    16.72
5/1/1901    22.67
6/1/1901    27.83
7/1/1901    27.17
8/1/1901    27.44
9/1/1901    23.56
10/1/1901   19.33
11/1/1901   13.67
12/1/1901   6.61
1/1/1902    6.72
2/1/1902    9.50
3/1/1902    11.83
4/1/1902    20.11
5/1/1902    24.00
6/1/1902    28.28
7/1/1902    25.83
8/1/1902    26.67
9/1/1902    22.06
10/1/1902   18.67
11/1/1902   12.94
12/1/1902   7.22
1/1/1903    6.78
2/1/1903    6.17
3/1/1903    11.78
4/1/1903    17.67
5/1/1903    21.17
6/1/1903    23.06
7/1/1903    27.44
8/1/1903    26.11
9/1/1903    22.72
10/1/1903   17.00
11/1/1903   12.39
12/1/1903   6.94
1/1/1904    6.50
2/1/1904    12.17
3/1/1904    16.00
4/1/1904    18.44
5/1/1904    21.17
6/1/1904    24.61
7/1/1904    25.50
8/1/1904    25.50
9/1/1904    21.67
10/1/1904   16.50
11/1/1904   10.22
12/1/1904   7.06
1/1/1905    7.11
2/1/1905    6.39
3/1/1905    13.33
4/1/1905    15.33
5/1/1905    22.22
6/1/1905    25.56
7/1/1905    25.39
8/1/1905    25.67
9/1/1905    22.72
10/1/1905   16.72
11/1/1905   11.89
12/1/1905   3.61
1/1/1906    6.56
2/1/1906    7.83
3/1/1906    12.44
4/1/1906    16.89
5/1/1906    21.56
6/1/1906    26.00
7/1/1906    24.39
8/1/1906    24.22
9/1/1906    22.33
10/1/1906   15.22
11/1/1906   9.50
12/1/1906   9.28
1/1/1907    10.33
2/1/1907    11.00
3/1/1907    16.50
4/1/1907    17.22
5/1/1907    19.56
6/1/1907    24.39
7/1/1907    25.44
8/1/1907    27.11
9/1/1907    23.61
10/1/1907   17.94
11/1/1907   9.11
12/1/1907   8.06
1/1/1908    7.44
2/1/1908    9.17
3/1/1908    15.61
4/1/1908    17.33
5/1/1908    21.28
6/1/1908    26.28
7/1/1908    24.44
8/1/1908    24.39
9/1/1908    21.94
10/1/1908   16.44
11/1/1908   10.94
12/1/1908   8.22
1/1/1909    10.17
2/1/1909    10.17
3/1/1909    13.11
4/1/1909    17.89
5/1/1909    21.39
6/1/1909    26.22
7/1/1909    26.67
8/1/1909    25.06
9/1/1909    21.50
10/1/1909   17.39
11/1/1909   13.89
12/1/1909   4.33
1/1/1910    7.06
2/1/1910    7.11
3/1/1910    15.33
4/1/1910    17.00
5/1/1910    22.00
6/1/1910    26.00
7/1/1910    27.22
8/1/1910    27.00
9/1/1910    23.44
10/1/1910   16.67
11/1/1910   13.17
12/1/1910   7.83
1/1/1911    10.44
2/1/1911    9.00
3/1/1911    14.67
4/1/1911    17.28
5/1/1911    20.39
6/1/1911    25.83
7/1/1911    25.17
8/1/1911    25.78
9/1/1911    24.06
10/1/1911   16.67
11/1/1911   9.39
12/1/1911   4.22
1/1/1912    7.00
2/1/1912    7.06
3/1/1912    11.17
4/1/1912    15.78
5/1/1912    21.78
6/1/1912    24.33
7/1/1912    26.22
8/1/1912    25.56
9/1/1912    21.44
10/1/1912   16.78
11/1/1912   9.94
12/1/1912   4.11
1/1/1913    5.89
2/1/1913    7.56
3/1/1913    10.28
4/1/1913    15.61
5/1/1913    21.67
6/1/1913    23.00
7/1/1913    25.22
8/1/1913    24.39
9/1/1913    19.17
10/1/1913   15.94
11/1/1913   12.44
12/1/1913   4.94
1/1/1914    9.22
2/1/1914    6.94
3/1/1914    10.67
4/1/1914    16.44
5/1/1914    20.72
6/1/1914    24.39
7/1/1914    25.33
8/1/1914    24.61
9/1/1914    22.17
10/1/1914   17.39
11/1/1914   11.44
12/1/1914   4.44
1/1/1915    4.72
2/1/1915    8.72
3/1/1915    7.78
4/1/1915    16.39
5/1/1915    20.67
6/1/1915    26.11
7/1/1915    26.33
8/1/1915    24.06
9/1/1915    23.00
10/1/1915   17.61
11/1/1915   12.39
12/1/1915   8.56
1/1/1916    9.78
2/1/1916    10.94
3/1/1916    15.94
4/1/1916    17.00
5/1/1916    23.22
6/1/1916    28.00
7/1/1916    25.89
8/1/1916    25.06
9/1/1916    22.00
10/1/1916   17.78
11/1/1916   9.94
12/1/1916   7.44
1/1/1917    7.33
2/1/1917    10.22
3/1/1917    12.50
4/1/1917    17.44
5/1/1917    20.44
6/1/1917    26.22
7/1/1917    28.00
8/1/1917    26.22
9/1/1917    23.11
10/1/1917   16.89
11/1/1917   13.33
12/1/1917   7.22
1/1/1918    2.89
2/1/1918    9.06
3/1/1918    14.61
4/1/1918    16.78
5/1/1918    21.83
6/1/1918    26.56
7/1/1918    27.67
8/1/1918    25.89
9/1/1918    21.44
10/1/1918   18.22
11/1/1918   9.22
12/1/1918   5.44
1/1/1919    4.44
2/1/1919    8.61
3/1/1919    12.22
4/1/1919    18.17
5/1/1919    21.56
6/1/1919    23.50
7/1/1919    26.00
8/1/1919    26.83
9/1/1919    22.33
10/1/1919   18.39
11/1/1919   11.67
12/1/1919   6.89
1/1/1920    5.11
2/1/1920    10.56
3/1/1920    10.89
4/1/1920    15.78
5/1/1920    22.39
6/1/1920    24.89
7/1/1920    26.67
8/1/1920    24.44
9/1/1920    24.06
10/1/1920   18.00
11/1/1920   10.50
12/1/1920   7.22
1/1/1921    9.11
2/1/1921    9.22
3/1/1921    13.83
4/1/1921    16.61
5/1/1921    22.28
6/1/1921    24.78
7/1/1921    25.61
8/1/1921    26.50
9/1/1921    24.17
10/1/1921   18.78
11/1/1921   12.89
12/1/1921   9.72
1/1/1922    5.56
2/1/1922    10.06
3/1/1922    12.22
4/1/1922    17.72
5/1/1922    22.61
6/1/1922    25.44
7/1/1922    27.44
8/1/1922    27.33
9/1/1922    23.78
10/1/1922   17.50
11/1/1922   11.39
12/1/1922   9.78
1/1/1923    10.17
2/1/1923    7.94
3/1/1923    10.22
4/1/1923    16.94
5/1/1923    22.11
6/1/1923    26.67
7/1/1923    26.33
8/1/1923    25.72
9/1/1923    23.17
10/1/1923   16.00
11/1/1923   10.11
12/1/1923   6.06
1/1/1924    4.44
2/1/1924    7.50
3/1/1924    10.50
4/1/1924    16.39
5/1/1924    20.89
6/1/1924    28.33
7/1/1924    27.22
8/1/1924    27.89
9/1/1924    22.22
10/1/1924   18.06
11/1/1924   13.17
12/1/1924   6.89
1/1/1925    5.22
2/1/1925    11.83
3/1/1925    15.11
4/1/1925    20.22
5/1/1925    22.67
6/1/1925    27.22
7/1/1925    27.72
8/1/1925    24.39
9/1/1925    23.00
10/1/1925   16.56
11/1/1925   10.06
12/1/1925   4.78
1/1/1926    4.56
2/1/1926    11.17
3/1/1926    11.00
4/1/1926    15.44
5/1/1926    21.17
6/1/1926    25.56
7/1/1926    25.50
8/1/1926    25.17
9/1/1926    24.17
10/1/1926   18.89
11/1/1926   11.28
12/1/1926   6.94
1/1/1927    8.67
2/1/1927    11.94
3/1/1927    12.50
4/1/1927    19.00
5/1/1927    24.56
6/1/1927    26.00
7/1/1927    26.61
8/1/1927    27.00
9/1/1927    23.11
10/1/1927   18.06
11/1/1927   14.72
12/1/1927   4.89
1/1/1928    7.17
2/1/1928    8.17
3/1/1928    14.44
4/1/1928    16.22
5/1/1928    21.89
6/1/1928    27.06
7/1/1928    26.56
8/1/1928    25.00
9/1/1928    21.44
10/1/1928   18.61
11/1/1928   9.78
12/1/1928   7.06
1/1/1929    7.17
2/1/1929    6.83
3/1/1929    12.50
4/1/1929    18.44
5/1/1929    20.94
6/1/1929    26.56
7/1/1929    25.78
8/1/1929    25.56
9/1/1929    22.78
10/1/1929   17.11
11/1/1929   8.28
12/1/1929   7.39
1/1/1930    4.11
2/1/1930    11.33
3/1/1930    11.00
4/1/1930    19.22
5/1/1930    21.11
6/1/1930    25.28
7/1/1930    26.06
8/1/1930    25.83
9/1/1930    24.17
10/1/1930   17.44
11/1/1930   9.83
12/1/1930   4.94
1/1/1931    6.06
2/1/1931    9.11
3/1/1931    10.72
4/1/1931    15.17
5/1/1931    20.22
6/1/1931    25.61
7/1/1931    26.17
8/1/1931    25.17
9/1/1931    25.83
10/1/1931   20.17
11/1/1931   12.28
12/1/1931   6.11
1/1/1932    6.39
2/1/1932    11.33
3/1/1932    10.33
4/1/1932    18.06
5/1/1932    21.39
6/1/1932    26.00
7/1/1932    26.61
8/1/1932    25.83
9/1/1932    20.33
10/1/1932   15.67
11/1/1932   10.06
12/1/1932   4.83
1/1/1933    7.78
2/1/1933    7.28
3/1/1933    13.83
4/1/1933    16.11
5/1/1933    21.33
6/1/1933    25.56
7/1/1933    26.78
8/1/1933    25.67
9/1/1933    24.83
10/1/1933   18.72
11/1/1933   12.11
12/1/1933   9.89
1/1/1934    6.50
2/1/1934    10.06
3/1/1934    12.44
4/1/1934    18.83
5/1/1934    23.28
6/1/1934    27.67
7/1/1934    27.33
8/1/1934    27.11
9/1/1934    23.78
10/1/1934   20.22
11/1/1934   12.72
12/1/1934   8.22
1/1/1935    9.39
2/1/1935    8.67
3/1/1935    15.17
4/1/1935    18.61
5/1/1935    20.67
6/1/1935    25.72
7/1/1935    26.06
8/1/1935    26.78
9/1/1935    20.67
10/1/1935   18.50
11/1/1935   11.72
12/1/1935   6.44
1/1/1936    6.28
2/1/1936    9.22
3/1/1936    13.67
4/1/1936    17.56
5/1/1936    21.72
6/1/1936    26.61
7/1/1936    26.11
8/1/1936    26.00
9/1/1936    21.94
10/1/1936   15.94
11/1/1936   9.33
12/1/1936   7.61
1/1/1937    5.67
2/1/1937    8.50
3/1/1937    10.56
4/1/1937    18.11
5/1/1937    22.83
6/1/1937    26.28
7/1/1937    27.28
8/1/1937    27.11
9/1/1937    23.33
10/1/1937   18.17
11/1/1937   10.78
12/1/1937   6.94
1/1/1938    7.50
2/1/1938    11.56
3/1/1938    14.33
4/1/1938    17.50
5/1/1938    22.61
6/1/1938    26.00
7/1/1938    25.33
8/1/1938    25.89
9/1/1938    22.39
10/1/1938   19.00
11/1/1938   10.00
12/1/1938   7.28
1/1/1939    7.06
2/1/1939    6.78
3/1/1939    14.00
4/1/1939    18.00
5/1/1939    23.00
6/1/1939    27.28
7/1/1939    26.56
8/1/1939    24.78
9/1/1939    23.67
10/1/1939   18.00
11/1/1939   9.11
12/1/1939   8.61

person Jeff Coldplume    schedule 20.09.2018    source แหล่งที่มา
comment
คุณสามารถโพสต์ข้อมูลตัวอย่างบางส่วนได้หรือไม่?   -  person yogkm    schedule 20.09.2018
comment
คุณช่วยอธิบายได้ไหมว่าทำไมไม่ทำงาน U=df-df.groupby([df.index.month]).transform('mean') ?   -  person jezrael    schedule 20.09.2018
comment
ฉันว่าฉันควรชี้แจงนะ ฉันต้องการรับ T_anomaly = อุณหภูมิดั้งเดิม - AvgTemp (ใช้เวลามากกว่า 30 ปี) โค้ดใช้งานได้แต่ทำให้ฉันมีความผิดปกติของอุณหภูมิโดยอิงตามค่าเฉลี่ยที่ใช้ตลอดอนุกรมเวลาทั้งหมด ฉันเดาว่านี่เป็นคำถามต่อไปนี้: คุณจะหาค่าเฉลี่ยในแต่ละเดือนในช่วงเวลา 30 ปี (คำนวณโดย MTT) และลบออกจากทุกองค์ประกอบรายเดือนในอนุกรมเวลา (df) ได้อย่างไร   -  person Jeff Coldplume    schedule 20.09.2018


คำตอบ (1)


ฉันเชื่อว่าต้องตรวจสอบว่ารูปแบบของวันที่และเวลาถูกต้องหรือไม่ - อาจเป็นพารามิเตอร์ที่จำเป็น dayfirst=True:

M = pd.read_csv('file.csv', sep='\s+', parse_dates=True, index_col= 'Date', dayfirst=True)
print(M.head())
             Temp
Date             
1895-01-01   7.72
1895-01-02   5.50
1895-01-03  13.56
1895-01-04  17.83
1895-01-05  20.39

ถ้าจำเป็น นับเฉลี่ยต่อปีและเดือน:

MTT = M['Temp'] - M.groupby(M.index.strftime("%Y%m"))['Temp'].transform('mean')
print (MTT.head(10))
Date
1895-01-01    -8.8775
1895-01-02   -11.0975
1895-01-03    -3.0375
1895-01-04     1.2325
1895-01-05     3.7925
1895-01-06     8.9025
1895-01-07     9.2925
1895-01-08     8.5125
1895-01-09     6.0725
1895-01-10    -0.7675
Name: Temp, dtype: float64

หรือต่อเดือนเท่านั้น:

MTT = M['Temp'] - M.groupby(M.index.month)['Temp'].transform('mean')
print (MTT.head(10))
Date
1895-01-01    -9.342167
1895-01-02   -11.562167
1895-01-03    -3.502167
1895-01-04     0.767833
1895-01-05     3.327833
1895-01-06     8.437833
1895-01-07     8.827833
1895-01-08     8.047833
1895-01-09     5.607833
1895-01-10    -1.232167
Name: Temp, dtype: float64
person jezrael    schedule 20.09.2018
comment
โดยกลไก ฉันกำลังพยายามลบอุณหภูมิเดิมในอนุกรมเวลาและ MTT MTT มีค่าเฉลี่ยในแต่ละเดือน (มากกว่า 30 ปี 10 ปี หรือช่วงระยะเวลาพื้นฐานใดก็ตามที่ฉันเลือก) ฉันจะลบค่าเฉลี่ยที่ฉันมีในแต่ละเดือนออกจากอนุกรมเวลาอุณหภูมิเดิมได้อย่างไร มีวิธีง่ายๆ ในการลบองค์ประกอบนี้ไหม? - person Jeff Coldplume; 21.09.2018
comment
@JeffColdplume - MTT has an average value for each month - มันหมายความว่าอะไร? คุณต้องนับหมายถึง MT.groupby(MT.index.strftime("%m")).mean() ? - person jezrael; 21.09.2018
comment
@JeffColdplume - ผลลัพธ์ที่คาดหวังของค่าเฉลี่ยคืออะไรหากข้อมูลตัวอย่าง rng = pd.date_range('2017-04-03', periods=36, freq='M') df = pd.DataFrame({'Date': rng, 'Temp': range(36)}) ? - person jezrael; 21.09.2018
comment
ฉันเดาว่าฉันสับสนเล็กน้อยกับสิ่งที่คุณได้รับ ผลลัพธ์ที่คาดหวังสำหรับโค้ดที่คุณระบุคือ: 01 7.085125 02 9.435036 03 13.195341 04 17.815860 05 22.343190 06 26.332437 07 26.704301 08 26.105239 09 23.020 325 10 17.903794 11 11.540650 12 7.406956 ชื่อ: อุณหภูมิ, dtype: float64 - person Jeff Coldplume; 01.10.2018
comment
นั่นคือวิธีการในแต่ละเดือน ถ้าฉันมีอนุกรมเวลาที่มากกว่าดัชนีที่ใช้หาค่าเฉลี่ย ฉันจะลบค่าเฉลี่ย 30 ปีนั้นออกจากข้อมูลได้อย่างไร - person Jeff Coldplume; 01.10.2018