【问题标题】:Timeseries Analysis: Group data by month so I can look at it per month时间序列分析:按月对数据进行分组,以便每月查看
【发布时间】:2021-12-19 12:35:55
【问题描述】:

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

例如,将一月记录在自己的数据框中的所有数据分配一月进行分析等

这是我当前的数据框:

   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  

非常感谢您的帮助。

【问题讨论】:

  • 您想要groupby 月份还是sort 月份。
  • dayfirst = True 的格式不为DD-MM-YYYY,但它只通知熊猫如何解析带有日期的字符串 - 如DD-MM-YYYYMM-DD-YYYY
  • 按月份分组,所以我可以只选择一月份记录的数据,例如
  • 如果你想要groupby,那么只需从字符串2005-01-01 中获取2005-01 - (即"2005-01-01"[:7] 给出"2005-01")并使用2005-01 创建新列并在groupby()
  • 如果你已经有对象datetime然后使用.dt.strftime('%Y-%m')创建像2005-01这样的字符串,然后使用这个值来分组。

标签: python pandas date time time-series


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      这应该可以得到你想要的。

      【讨论】:

      • 好的,这很好,但是我如何为一个月的数据分配一个变量。例如,如果我使用以下内容:
      • 一月 = 日期为 XX/01/2005 的任何数据
      • 用于我的数据分析,所以我可以比较月份
      • 那么您有 1 列,而该列有多种日期格式?不是2021/01/01这个格式吗?
      【解决方案4】:

      如果你有 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())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-13
        • 2013-11-28
        相关资源
        最近更新 更多