📌  相关文章
📜  如何按日期和时间对 Pandas DataFrame 进行分组?

📅  最后修改于: 2022-05-13 01:55:11.175000             🧑  作者: Mango

如何按日期和时间对 Pandas DataFrame 进行分组?

在本文中,我们将讨论如何在 Pandas 中根据日期和时间按数据框分组。我们将看到按年、月、天等对时间序列数据框进行分组的方法。此外,我们还将看到对时间对象(如分钟)进行分组的方法。

Pandas GroupBy 允许我们为对象指定 groupby 指令。这个指定的指令将通过 grouper函数的 key 参数以及级别和/或轴参数(如果给定)选择一个列,目标对象/列的索引级别。

下面是一些示例,它们描述了如何使用 pandas Grouper 类根据日期和时间按数据框进行分组。

示例 1:按月分组



Python3
# importing modules
import pandas as pd
  
# creating a dataframe df
df = pd.DataFrame(
    {
        "Date": [
            pd.Timestamp("2000-11-02"),
            pd.Timestamp("2000-01-02"),
            pd.Timestamp("2000-01-09"),
            pd.Timestamp("2000-03-11"),
            pd.Timestamp("2000-01-26"),
            pd.Timestamp("2000-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
  
# show df
display(df)
  
# applying the groupby function on df
df.groupby(pd.Grouper(key='Date', axis=0, 
                      freq='M')).sum()


Python3
# importing modules
import pandas as pd
  
# creating a dataframe df
df = pd.DataFrame(
    {
        "Date": [
            pd.Timestamp("2000-11-02"),
            pd.Timestamp("2000-01-02"),
            pd.Timestamp("2000-01-09"),
            pd.Timestamp("2000-03-11"),
            pd.Timestamp("2000-01-26"),
            pd.Timestamp("2000-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
  
# display dataframe
display(df)
  
# applying groupby
df.groupby(pd.Grouper(key='Date', axis=0, 
                      freq='2D', sort=True)).sum()


Python3
# importing module
import pandas as pd
  
# creating dataframe with datetime
df = pd.DataFrame(
    {
        "Date": [
  
            # here the date contains
            # different years
            pd.Timestamp("2010-11-02"),
            pd.Timestamp("2011-01-02"),
            pd.Timestamp("2013-01-09"),
            pd.Timestamp("2014-03-11"),
            pd.Timestamp("2015-01-26"),
            pd.Timestamp("2012-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
# show df
display(df)
  
# applying groupby function
df.groupby(pd.Grouper(key='Date', freq='2Y')).sum()


Python3
# importing module
import pandas as pd
  
# create an array of 5 dates starting 
# at '2015-02-24', one per minute
dates = pd.date_range('2015-02-24', periods=10, freq='T')
  
# creating dataframe with above array 
# of dates
df = pd.DataFrame({"Date": dates, "ID": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                   "Price": [140, 120, 230, 40, 100, 450, 234, 785, 12, 42]})
  
# display dataframe
display(df)
  
# applied groupby function
df.groupby(pd.Grouper(key='Date', freq='2min')).sum()


输出:

在上面的示例中,数据框是按日期列分组的。由于我们提供了 freq = 'M' 表示月份,因此数据按月分组,直到每个月的最后一天,并提供价格列的总和。我们没有提供所有月份的值,然后 groupby函数也显示所有月份的数据,并为其他月份指定值 0。

示例 2:按天分组

蟒蛇3

# importing modules
import pandas as pd
  
# creating a dataframe df
df = pd.DataFrame(
    {
        "Date": [
            pd.Timestamp("2000-11-02"),
            pd.Timestamp("2000-01-02"),
            pd.Timestamp("2000-01-09"),
            pd.Timestamp("2000-03-11"),
            pd.Timestamp("2000-01-26"),
            pd.Timestamp("2000-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
  
# display dataframe
display(df)
  
# applying groupby
df.groupby(pd.Grouper(key='Date', axis=0, 
                      freq='2D', sort=True)).sum()

输出:



在上面的示例中,数据框是按日期列分组的。由于我们提供了 freq = '5D' 这意味着五天,所以数据按每个月的间隔 5 天分组,直到日期列中给出的最后一个日期。

示例 3:按年份分组

蟒蛇3

# importing module
import pandas as pd
  
# creating dataframe with datetime
df = pd.DataFrame(
    {
        "Date": [
  
            # here the date contains
            # different years
            pd.Timestamp("2010-11-02"),
            pd.Timestamp("2011-01-02"),
            pd.Timestamp("2013-01-09"),
            pd.Timestamp("2014-03-11"),
            pd.Timestamp("2015-01-26"),
            pd.Timestamp("2012-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
# show df
display(df)
  
# applying groupby function
df.groupby(pd.Grouper(key='Date', freq='2Y')).sum()

输出:

在上面的示例中,数据框是按日期列分组的。由于我们提供了 freq = '2Y' 表示 2 年,因此数据以 2 年为间隔分组。

示例 4:按分钟分组

蟒蛇3

# importing module
import pandas as pd
  
# create an array of 5 dates starting 
# at '2015-02-24', one per minute
dates = pd.date_range('2015-02-24', periods=10, freq='T')
  
# creating dataframe with above array 
# of dates
df = pd.DataFrame({"Date": dates, "ID": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                   "Price": [140, 120, 230, 40, 100, 450, 234, 785, 12, 42]})
  
# display dataframe
display(df)
  
# applied groupby function
df.groupby(pd.Grouper(key='Date', freq='2min')).sum()

输出:

在上面的示例中,数据以每 2 分钟的间隔分组。