Python 熊猫:根据月长在列中合并和平均数据

Python 熊猫:根据月长在列中合并和平均数据,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我有一个由部门、年份、发票月份、发票日期和价值组成的数据框架 我已经用工作日抵消了发票日期,现在我试图实现的是将所有具有相同工作日数的月份(因此每年每个月的“计数”)合并,并平均每天的值 我掌握的资料如下: Department Year Month Invoice Date Value 0 Sales 2019 March 2019-03-25 1000.

我有一个由部门、年份、发票月份、发票日期和价值组成的数据框架

我已经用工作日抵消了发票日期,现在我试图实现的是将所有具有相同工作日数的月份(因此每年每个月的“计数”)合并,并平均每天的值

我掌握的资料如下:

                    Department  Year      Month      Invoice Date   Value
0                Sales          2019      March       2019-03-25   1000.00
1                Sales          2019      March       2019-03-26   2000.00
2                Sales          2019      March       2019-03-27   3000.00
3                Sales          2019      March       2019-03-28   4000.00
4                Sales          2019      March       2019-03-29   5000.00
...                        ...   ...        ...              ...       ...
2435            Specialist      2020     August       2020-08-27   6000.00
2436            Specialist      2020     August       2020-08-28   7000.00
2437            Specialist      2020  September       2020-09-01   8000.00
2438            Specialist      2020  September       2020-09-02   9000.00
2439            Specialist      2020  September       2020-09-07   1000.00
Year  Month
2019  April        21
      August       21
      December     20
      July         23
      June         20
      March         5
      May          21
      November     21
      October      23
      September    21
2020  April        21
      August       20
      February     20
      January      22
      July         23
      June         22
      March        22
      May          19
      September     5
每月的统计如下:

                    Department  Year      Month      Invoice Date   Value
0                Sales          2019      March       2019-03-25   1000.00
1                Sales          2019      March       2019-03-26   2000.00
2                Sales          2019      March       2019-03-27   3000.00
3                Sales          2019      March       2019-03-28   4000.00
4                Sales          2019      March       2019-03-29   5000.00
...                        ...   ...        ...              ...       ...
2435            Specialist      2020     August       2020-08-27   6000.00
2436            Specialist      2020     August       2020-08-28   7000.00
2437            Specialist      2020  September       2020-09-01   8000.00
2438            Specialist      2020  September       2020-09-02   9000.00
2439            Specialist      2020  September       2020-09-07   1000.00
Year  Month
2019  April        21
      August       21
      December     20
      July         23
      June         20
      March         5
      May          21
      November     21
      October      23
      September    21
2020  April        21
      August       20
      February     20
      January      22
      July         23
      June         22
      March        22
      May          19
      September     5
我希望通过使用此计数,我可以汇总原始df的数据和平均值,例如4月、8月、5月、11月、9月(2019年)以及4月(2020年),因为每个月都有21个工作日

每月的每一天生成一个数据帧,即每一天的月平均总和

我希望这是有道理的

注意:请忽略5天的长度,只是这些月份的数据不完整

多谢各位

编辑:我刚刚意识到,每个月的天数不会排成一行,所以我的计划是根据每个月的第一个工作日、第二个工作日、第三个工作日等进行汇总,而不考虑实际日期。 还有(对不起):我希望它能按部门分类

        Department   Month Length  Day Number  Average Value
    0   Sales           21              1            20000
    1   Sales           21              2            5541
    2   Sales           21              3            87485
    3   Sales           21              4            1863
    4   Sales           21              5            48687
    5   Sales           21              6            486996
    6   Sales           21              7            892
    7   Sales           21              8            985
    8   Sales           21              9            14169
    9   Sales           21             10            20000
   10   Sales           21             11            5541
   11   Sales           21             12            87485
   12   Sales           21             13            1863
   13   Sales           21             14            48687
   14   Sales           21             15            486996
   15   Sales           21             16            892
   16   Sales           21             17            985
   17   Sales           21             18            14169
   ......
为了更好地解释这个问题,让我们以销售额为例,以及所有有21天的月份,在这21天的月份里,我希望得到平均值,并得到一个如上所示的表格


因此,“第1天”是21个月内所有“第1天”的平均值(如计数df所示)!这是为了让我能够绘制一个折线图剖面图,以显示21天内每个给定日期的平均收入值。我希望这是一个更好的解释,抱歉。

我不确定我是否理解你的问题。也许你可以在你的问题中添加一个预期的df

同时,这会给你指明你要寻找的方向:

import pandas as pd
from random import randint
from calendar import month_name


df = pd.DataFrame({'years': [randint(1998, 2020) for x in range(10000)],
                   'months': [month_name[randint(1, 12)] for x in range(10000)],
                   'days':  [randint(1, 30) for x in range(10000)],
                   'revenue': [randint(0, 1000) for x in range(10000)]}
                  )

print(df.groupby(['months', 'days'])['revenue'].mean())
输出为:


months     days
April      1       475.529412
           2       542.870968
           3       296.045455
           4       392.416667
           5       475.571429
   
September  26      516.888889
           27      539.583333
           28      513.500000
           29      480.724138
           30      456.500000
Name: revenue, Length: 360, dtype: float64

您是否在寻找一个二维数据概念,比如一年中平均的月份x天?意味着你将有12个月*31天的平均值?添加了更好的解释!对不起,我还是不知道你需要什么。您可以执行管道组操作。是否需要先按年度和月份分组,然后再按天数分组<代码>打印(df.groupby(['years','month','days'])['revenue'].mean().groupby('days').mean())抱歉!!我会去考虑如何更好地解释这一点!无论如何谢谢你!