Python 比较不同月份的日期
我希望得到一些指导,告诉我如何比较不同年份的相同日期。我有1997-2018年3月的每日平均温度数据,我的目标是查看我的时间段内每天的平均温度。我的df很简单,头部和尾部如下所示: IndexType=DatetimePython 比较不同月份的日期,python,python-3.x,Python,Python 3.x,我希望得到一些指导,告诉我如何比较不同年份的相同日期。我有1997-2018年3月的每日平均温度数据,我的目标是查看我的时间段内每天的平均温度。我的df很简单,头部和尾部如下所示: IndexType=Datetime 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-
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年的平均日温度为基准的系列
我的代码:
您可以使用
groupby
查看大量比较。不确定这是否正是你想要的
确保您的日期列是时间戳
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
非常感谢。我通过重置索引、创建两个新列“year”和“date”并创建一个pivot_表解决了这个问题(可能是以一种混乱的方式)。
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