如何按月和年对 pands 数据框进行分区

时间:2021-06-10 13:57:44

标签: python pandas dataframe

我有一个很大的数据框,里面有一个日期字段。我想通过 MM/YYYY 从数据帧创建子数据帧。我可以通过指定日期范围来做到这一点,但我想让它动态化,其中整个数据框基于日期列中的月份年份进行分区。

来自:

        sales              date
  0       420        01/10/2021
  1       380        01/15/2021
  3       420        01/20/2021
  4       380        02/02/2021
  5       420        03/10/2021
  6       380        03/13/2021

致:

        sales              date
  0       420        01/10/2021
  1       380        01/15/2021
  3       420        01/20/2021


        sales              date
  0       380        02/02/2021


        sales              date
  0       420        03/10/2021
  1       380        03/13/2021

3 个答案:

答案 0 :(得分:1)

groupby然后保存到dict

d = {x : y for x , y in df.groupby(pd.to_datetime(df.date).dt.strftime('%y-%m'))}
d
Out[8]: 
{'21-01':    sales        date
 0    420  01/10/2021
 1    380  01/15/2021
 3    420  01/20/2021, '21-02':    sales        date
 4    380  02/02/2021, '21-03':    sales        date
 5    420  03/10/2021
 6    380  03/13/2021}

答案 1 :(得分:1)

试试:

df["date"] = pd.to_datetime(df["date"])
for _, g in df.groupby([df.date.dt.year, df.date.dt.month]):
    print(g)
    print()

打印:

   sales       date
0    420 2021-01-10
1    380 2021-01-15
3    420 2021-01-20

   sales       date
4    380 2021-02-02

   sales       date
5    420 2021-03-10
6    380 2021-03-13

答案 2 :(得分:0)

  1. 将日期列更改为日期时间对象,以便您可以更轻松地提取月-年数据。
  2. 将月-年数据提取到新列中。
  3. 按此新列分组,以提取唯一的数据框。
df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')
df['month/year'] = str(df['date'].dt.month) +  "/" + (df['date'].dt.year)
for month_year, df_month_year in df.groupby('month/year'):
    print(df_month_year)