如何从具有日期时间索引的数据帧中减去具有月份索引的数据帧
How to subtract dataframe with month index from dataframe with datetime index
我有两个数据帧,一个叫Clim
,一个叫O3_mda8_3135
。 Clim
是一个包含一年数据月平均气象参数的数据框;这是数据框的示例:
Clim.head(12)
Out[7]:
avgT_2551 avgT_5330 ... avgNOx_3135(ppb) avgCO_3135(ppm)
Month ...
1 14.924181 13.545691 ... 48.216128 0.778939
2 16.352172 15.415385 ... 36.110385 0.605629
3 20.530879 19.684720 ... 20.974544 0.460571
4 23.738576 22.919158 ... 14.270995 0.432855
5 26.961927 25.779007 ... 11.087005 0.334505
6 32.208322 31.225072 ... 12.801409 0.384325
7 35.280124 34.265880 ... 10.732970 0.321284
8 35.428857 34.433351 ... 11.916420 0.326389
9 32.008317 30.856782 ... 15.236616 0.343405
10 25.691444 24.139874 ... 24.829518 0.467317
11 19.310550 17.827946 ... 36.339847 0.621938
12 14.186050 12.860077 ... 49.173287 0.720708
[12 rows x 20 columns]
我还有数据框 O3_mda8_3135
,它是通过首先计算每个组件的 8 小时滚动平均值,然后找到臭氧的最大每日值创建的,这就是为什么所有时间戳和索引都是不同的。一年中的每一天,每个气象参数都有一个值。这是此数据框的示例:
O3_mda8_3135
Out[9]:
date Temp_C_2551 ... CO_3135(ppm) O3_mda8_3135
12 2018-01-01 12:00:00 24.1 ... 0.294 10.4000
36 2018-01-02 12:00:00 26.3 ... 0.202 9.4375
60 2018-01-03 12:00:00 22.8 ... 0.184 7.1625
84 2018-01-04 12:00:00 25.6 ... 0.078 8.2500
109 2018-01-05 13:00:00 27.3 ... NaN 9.4500
... ... ... ... ...
8653 2018-12-27 13:00:00 19.6 ... 0.115 35.1125
8676 2018-12-28 12:00:00 14.9 ... 0.097 39.4500
8700 2018-12-29 12:00:00 13.9 ... 0.092 38.1250
8724 2018-12-30 12:00:00 17.4 ... 0.186 35.1375
8753 2018-12-31 17:00:00 8.3 ... 0.110 30.8875
[365 rows x 24 columns]
我想知道如何从O3_mda8_3135
中的相应列和行中减去Clim
中的平均值。例如,我想从其他数据帧 O3_mda8_3135
一月份的每一天中减去一月份站点 2551 的温度平均值(avgT_2551
数据帧 Clim
中的第 1 个月),列名 Temp_C_2551
.
avgT_2551
对应于另一个dataframe中的Temp_C_2551
有没有简单的方法可以做到这一点?我应该从日期时间中提取月份并将其放入 O3_mda8_3135
数据框的另一列吗?我还是个初学者,如果有任何建议或提示,我将不胜感激。
我看到了这个 post 但是没有足够的信息让我理解正在执行的操作。
感谢 Stack Overflow 的帖子,我自己弄明白了:)
我在对应于月份的两个数据框中创建了新列。我最初使用 Clim = Clim.set_index('Month')
将 Clim
中的索引设置为月份,所以我删除了该行。然后,我在 O3_mda8_3135
数据框中为 Month 创建了一个列。之后,我根据 'Month' 列合并了两个数据框,然后使用 pd.sub 函数减去我想要的列。
这是一些示例代码,抱歉,变量太长了,但是这个数据框很大。
O3_mda8_3135['Month'] = O3_mda8_3135['date'].dt.month
O3_mda8_3135_anom = pd.merge(O3_mda8_3135, Clim, how='left', on=('Month'))
O3_mda8_3135_anom['O3_mda8_3135_anom'] = O3_mda8_3135_anom['O3_mda8_3135'].sub(O3_mda8_3135_anom['MDA8_3135'])
这些帖子帮助我回答了我的问题:
How to calculate monthly mean of a time seies data and substract the monthly mean with the values of that month of each year?
我有两个数据帧,一个叫Clim
,一个叫O3_mda8_3135
。 Clim
是一个包含一年数据月平均气象参数的数据框;这是数据框的示例:
Clim.head(12)
Out[7]:
avgT_2551 avgT_5330 ... avgNOx_3135(ppb) avgCO_3135(ppm)
Month ...
1 14.924181 13.545691 ... 48.216128 0.778939
2 16.352172 15.415385 ... 36.110385 0.605629
3 20.530879 19.684720 ... 20.974544 0.460571
4 23.738576 22.919158 ... 14.270995 0.432855
5 26.961927 25.779007 ... 11.087005 0.334505
6 32.208322 31.225072 ... 12.801409 0.384325
7 35.280124 34.265880 ... 10.732970 0.321284
8 35.428857 34.433351 ... 11.916420 0.326389
9 32.008317 30.856782 ... 15.236616 0.343405
10 25.691444 24.139874 ... 24.829518 0.467317
11 19.310550 17.827946 ... 36.339847 0.621938
12 14.186050 12.860077 ... 49.173287 0.720708
[12 rows x 20 columns]
我还有数据框 O3_mda8_3135
,它是通过首先计算每个组件的 8 小时滚动平均值,然后找到臭氧的最大每日值创建的,这就是为什么所有时间戳和索引都是不同的。一年中的每一天,每个气象参数都有一个值。这是此数据框的示例:
O3_mda8_3135
Out[9]:
date Temp_C_2551 ... CO_3135(ppm) O3_mda8_3135
12 2018-01-01 12:00:00 24.1 ... 0.294 10.4000
36 2018-01-02 12:00:00 26.3 ... 0.202 9.4375
60 2018-01-03 12:00:00 22.8 ... 0.184 7.1625
84 2018-01-04 12:00:00 25.6 ... 0.078 8.2500
109 2018-01-05 13:00:00 27.3 ... NaN 9.4500
... ... ... ... ...
8653 2018-12-27 13:00:00 19.6 ... 0.115 35.1125
8676 2018-12-28 12:00:00 14.9 ... 0.097 39.4500
8700 2018-12-29 12:00:00 13.9 ... 0.092 38.1250
8724 2018-12-30 12:00:00 17.4 ... 0.186 35.1375
8753 2018-12-31 17:00:00 8.3 ... 0.110 30.8875
[365 rows x 24 columns]
我想知道如何从O3_mda8_3135
中的相应列和行中减去Clim
中的平均值。例如,我想从其他数据帧 O3_mda8_3135
一月份的每一天中减去一月份站点 2551 的温度平均值(avgT_2551
数据帧 Clim
中的第 1 个月),列名 Temp_C_2551
.
avgT_2551
对应于另一个dataframe中的Temp_C_2551
有没有简单的方法可以做到这一点?我应该从日期时间中提取月份并将其放入 O3_mda8_3135
数据框的另一列吗?我还是个初学者,如果有任何建议或提示,我将不胜感激。
我看到了这个 post
感谢 Stack Overflow 的帖子,我自己弄明白了:)
我在对应于月份的两个数据框中创建了新列。我最初使用 Clim = Clim.set_index('Month')
将 Clim
中的索引设置为月份,所以我删除了该行。然后,我在 O3_mda8_3135
数据框中为 Month 创建了一个列。之后,我根据 'Month' 列合并了两个数据框,然后使用 pd.sub 函数减去我想要的列。
这是一些示例代码,抱歉,变量太长了,但是这个数据框很大。
O3_mda8_3135['Month'] = O3_mda8_3135['date'].dt.month
O3_mda8_3135_anom = pd.merge(O3_mda8_3135, Clim, how='left', on=('Month'))
O3_mda8_3135_anom['O3_mda8_3135_anom'] = O3_mda8_3135_anom['O3_mda8_3135'].sub(O3_mda8_3135_anom['MDA8_3135'])
这些帖子帮助我回答了我的问题:
How to calculate monthly mean of a time seies data and substract the monthly mean with the values of that month of each year?