【问题标题】:Pandas: Combine and average data in a column based on length of monthPandas:根据月份的长度在列中组合和平均数据
【发布时间】:2020-12-29 00:13:35
【问题描述】:

我有一个数据框,其中包含部门、年份、发票月份、发票日期和金额。

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

我掌握的数据如下:

                    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 天月份中每一天的平均收入值。我希望这是一个更好的解释,道歉。

【问题讨论】:

  • 您是否正在寻找二维数据概念,例如多年来平均的月 x 天?这意味着您将有 12 个月 * 31 天的平均值?

标签: python pandas dataframe datetime


【解决方案1】:

我不确定我是否理解你的问题。也许您可以在问题中添加预期的 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

【讨论】:

  • 添加了更好的解释!
  • 抱歉,我仍然不确定您需要什么。您可以管道组操作。像首先按年和月分组然后最后按天分组的东西会有所帮助吗? print(df.groupby(['years', 'months', 'days'])['revenue'].mean().groupby('days').mean())
  • 对不起!!我会去思考如何更好地解释这一点!还是谢谢你!
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 2023-03-06
  • 2020-06-23
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多