首页 > 解决方案 > 比较不同月份的日期

问题描述

我希望得到一些指导,我可以如何比较不同年份的相同日期。我有 1997 年至 2018 年所有 3 月的每日平均温度数据,我的目标是查看我的时间段内每天的平均温度。我的 df 很简单,头部和尾部如下所示:

索引类型 = 日期时间

Date temp


1997-03-01  6.00

1997-03-02  6.22

1997-03-03  6.03

1997-03-04  4.41

1997-03-05  5.29


Date temp

2018-03-27 -2.44

2018-03-28 -1.01

2018-03-29 -1.08

2018-03-30 -0.53

2018-03-31 -0.11

我想目标可能是 1)一个以天为索引,以年为列的数据框,或者 2)一个以天为索引和 1997-2018 年平均每日温度的系列。

我的代码:

df = pd.read_csv(file, sep=';', skiprows=9, usecols=[0, 1, 2, 3], parse_dates=[['Datum', 'Tid (UTC)']], index_col=0)
print(df.head())

df.columns = ['temp']
df.index.names = ['Date']

df_mar = df.loc[df.index.month == 3]
df_mar = df_mar.resample('D').mean().round(2)

标签: pythonpython-3.x

解决方案


您可以使用groupby查看很多比较。不确定这是否正是您要寻找的?

确保您的日期列是Timestamp.

import pandas as pd
df = df.reset_index(drop=False)
df['Date'] = pd.to_datetime(df['Date'])

我将初始化一个数据框来练习:

import datetime
import random
base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(0, 100000)]
df = pd.DataFrame({'date':date_list, 'temp':[random.randint(-30, 100) for x in range(100000)]})
march = df[df['date'].dt.month == 3]

g = march.groupby(march['date'].dt.day).agg({'temp':['max', 'min', 'mean']})

或者,您可以在整个数据框中执行此操作,而不仅仅是游行。

df.groupby(df['date'].dt.month).agg({'temp':['max', 'min', 'mean', 'nunique']})
     temp                       
      max min       mean nunique
date                            
1     100 -30  34.999765     131
2     100 -30  35.167485     131
3     100 -30  35.660215     131
4     100 -30  34.436264     131
5     100 -30  35.424371     131
6     100 -30  35.086253     131
7     100 -30  35.188133     131
8     100 -30  34.772781     131
9     100 -30  34.839173     131
10    100 -30  35.248528     131
11    100 -30  34.666302     131
12    100 -30  34.575583     131

推荐阅读