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())抱歉!!我会去考虑如何更好地解释这一点!无论如何谢谢你!