将数据分为4个季节?

2024-10-05 10:44:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框(mydata),包含4个三年(从2016-01-23到2019-10-12)内的10000多个样本,其中包括一个“日期”作为特征之一。我想根据季节(春季、夏季、秋季和冬季)将数据帧(mydata)划分为4个数据帧。这是我的数据框:

 mydata:
     f1,   f2,    f3,      date
s1   23,  2.5,  0.3,  2016-04-03
s2   03,  0.5,  1.3,  2017-08-01
s3   14,   4,   2.3,  2016-10-02
....
sn   09,  4.3,   32,  2019-03-03

因此,me期望的输出应该是四个数据帧(春季、夏季……)。例如,四季中春季记录的数据应放在第一个数据帧(spring)中,以此类推:

 Spring=[the data which are logged during the spring (from march 1 to May 31) during the four years]
 Summer=[the data which are logged during the spring (fro June 1 to August 31) during the four years]
 .....

我可以像这样手动处理,比如一个赛季,但我想要一种更有效的方式:

 season1=pd.DataFrame()
 season1=season1.append(mydata[(mydata['date']>'2016-03-01') & (mydata['date']<'2016-05-31') ])
 season1=season1.append(mydata[(mydata['date']>'2017-03-01') & (mydata['date']<'2017-05-31') ])
 season1=season1.append(mydata[(mydata['date']>'2018-03-01') & (mydata['date']<'2018-05-31') ])
 season1=season1.append(mydata[(mydata['date']>'2019-03-01') & (mydata['date']<'2019-05-31') ])

Tags: theto数据whichdatadatearefour
1条回答
网友
1楼 · 发布于 2024-10-05 10:44:39

快速创建类似于数据集的内容

import pandas as pd

variables = np.random.randn(1300,3)
time = pd.date_range("2016-01-01", periods=1300, name='date')
df = pd.DataFrame(variables, columns=['f1','f2','f3'], index=time).reset_index()

看起来像:

           date        f1        f2        f3
0    2016-01-01 -0.234615  0.671180  0.423316
1    2016-01-02 -0.900134 -0.021248 -0.608107
2    2016-01-03 -1.558302 -0.063307  0.578215
3    2016-01-04  0.474513  1.787985  0.929357
4    2016-01-05 -0.734408 -0.965413 -1.521657
        ...       ...       ...       ...
1295 2019-07-19  0.774643 -1.108196 -1.043404
1296 2019-07-20  0.645087 -2.107540 -1.054049
1297 2019-07-21 -1.126800  1.265989  0.298515
1298 2019-07-22 -0.501056  1.137609  1.344562
1299 2019-07-23 -0.409044  0.362831  0.988417

[1300 rows x 4 columns]

然后,您可以通过

df.loc[(df.date.dt.month==1)]

为了得到几个月的时间,只需叠加条件(例如所有一月和二月)

df.loc[(df.date.dt.month==1) | (df.date.dt.month==2)]

最后,为了获得更大的灵活性,可以定义一个任意3个月的函数

def getMonths(input, m1, m2, m3):
    return input.loc[(input.date.dt.month==m1) | (input.date.dt.month==m2) | (input.date.dt.month==m3)]

例如:

Spring = getMonths(df,3,4,5)

相关问题 更多 >

    热门问题