时间序列分析:按月分组数据,以便我可以每月查看

Timeseries Analysis: Group data by month so I can look at it per month

我想知道如何按月对数据进行分组,以便我可以按月查看数据。我该怎么做?

比如给自己dataframe中1月记录的所有数据赋值january,用于分析等

这是我当前的数据框:

   WC_Humidity[%]  WC_Htgsetp[C]  WC_Clgsetp[C]       Date   Time  
0       55.553640             18             26 2005-01-01  00:10  
1       54.204342             18             26 2005-01-01  00:20  
2       51.896272             18             26 2005-01-01  00:30  
3       49.007770             18             26 2005-01-01  00:40  
4       45.825810             18             26 2005-01-01  00:50  

非常感谢您的帮助。

您可以使用以下代码转换您的列。

df1['Date'] = pd.to_datetime(df["Date"].dt.strftime('%d-%m-%Y'))

您可以参考官方文档了解为什么 dayfirst 不起作用。 https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html

试试这个:

df1['Date'].to_numpy().astype('datetime64[M]')

如果该列的格式为 2021-01-29、30-12-2024,则应在上面的行之前处理它并进行相应的解析。

df1['Date'] = pd.to_datetime(df1['Date'])

现在您可以使用此代码将日期列转换为您想要的方式。

df1['Date'] = df['Date1'].dt.strftime('%d/%m/%Y')

这应该能满足您的需求。

如果你有像 2005-01-01 这样的字符串,那么你可以得到

df['year-month'] = df['Date'].str[:7]

以后您可以使用

df.groupby('year-month')

最少的工作代码。

我更改了日期以在数据中包含不同的月份。

我使用io只是为了模拟内存中的文件。

text = '''WC_Humidity[%],WC_Htgsetp[C],WC_Clgsetp[C],Date,Time
55.553640,18,26,2005-01-01,00:10
54.204342,18,26,2005-01-01,00:20
51.896272,18,26,2005-02-01,00:30
49.007770,18,26,2005-02-01,00:40
45.825810,18,26,2005-03-01,00:50
'''

import pandas as pd
import io

df = pd.read_csv(io.StringIO(text))

df['year-month'] = df['Date'].str[:7]

print(df)

for value, group in df.groupby('year-month'):
    print()
    print('---', value, '---')
    print(group)
    print()
    print('average WC_Humidity[%]:', group['WC_Humidity[%]'].mean())

结果:

   WC_Humidity[%]  WC_Htgsetp[C]  WC_Clgsetp[C]       Date   Time year-month
0       55.553640             18             26 2005-01-01  00:10    2005-01
1       54.204342             18             26 2005-01-01  00:20    2005-01
2       51.896272             18             26 2005-02-01  00:30    2005-02
3       49.007770             18             26 2005-02-01  00:40    2005-02
4       45.825810             18             26 2005-03-01  00:50    2005-03

--- 2005-01 ---
   WC_Humidity[%]  WC_Htgsetp[C]  WC_Clgsetp[C]       Date   Time year-month
0       55.553640             18             26 2005-01-01  00:10    2005-01
1       54.204342             18             26 2005-01-01  00:20    2005-01

average WC_Humidity[%]: 54.878991

--- 2005-02 ---
   WC_Humidity[%]  WC_Htgsetp[C]  WC_Clgsetp[C]       Date   Time year-month
2       51.896272             18             26 2005-02-01  00:30    2005-02
3       49.007770             18             26 2005-02-01  00:40    2005-02

average WC_Humidity[%]: 50.452021

--- 2005-03 ---
   WC_Humidity[%]  WC_Htgsetp[C]  WC_Clgsetp[C]       Date   Time year-month
4        45.82581             18             26 2005-03-01  00:50    2005-03

average WC_Humidity[%]: 45.82581

如果你有对象datetime那么你可以

df['year-month'] = df['Date'].dt.strftime('%Y-%m')

其余相同

text = '''WC_Humidity[%],WC_Htgsetp[C],WC_Clgsetp[C],Date,Time
55.553640,18,26,2005-01-01,00:10
54.204342,18,26,2005-01-01,00:20
51.896272,18,26,2005-02-01,00:30
49.007770,18,26,2005-02-01,00:40
45.825810,18,26,2005-03-01,00:50
'''

import pandas as pd
import io

df = pd.read_csv(io.StringIO(text))

# create datetime objects
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')

df['year-month'] = df['Date'].dt.strftime('%Y-%m')

print(df)

for value, group in df.groupby('year-month'):
    print()
    print('---', value, '---')
    print(group)
    print()
    print('average WC_Humidity[%]:', group['WC_Humidity[%]'].mean())