pandas 按时间序列中的类别计算月初至今和年初至今的平均值,并检索最近2个工作日的值,

0md85ypi  于 2022-12-21  发布在  其他
关注(0)|答案(1)|浏览(96)

我有一个包含几个类别的一年时间序列的 Dataframe ,如下所示,为了简单起见,我在这里只显示了一部分日期和价格

category        date  price
0          A 2022-12-19      5
1          A 2022-12-16      5
2          A 2022-12-15     21
3          A 2022-12-14     21
4          A 2022-12-13     15
5          A 2022-12-12     18
6          B 2022-12-19     48
7          B 2022-12-16     92
8          B 2022-12-15    212
9          B 2022-12-14    185
10         B 2022-12-13    874
11         B 2022-12-12     51
12         C 2022-12-19     15
13         C 2022-12-16     65
14         C 2022-12-15    874
15         C 2022-12-14    485
16         C 2022-12-13     52
17         C 2022-12-12     99

我希望计算每个类别的本月至今和年初至今的平均价格,并自动保留每个类别最近2个工作日的数据
例如,今天是12月19日,YtD平均值将是从2022年1月开始到今天的平均价格,而MtD平均值将是从2022年12月1日开始到今天的平均价格。
Pandas似乎没有计算YtD和MtD平均值的方法

h79rfbju

h79rfbju1#

您可以使用panda中的groupbyresample函数来计算月初至今和年初至今的平均值。
若要计算本月至今的平均值,可以按类别对数据进行分组,然后使用resample函数按月份对数据进行分组。然后可以使用mean函数计算每个月的平均值。
示例:

# convert the date column to datetime
df['date'] = pd.to_datetime(df['date'])

# calculate the month-to-date average
monthly_averages = df.groupby('category').resample('M', on='date').mean()
print(monthly_averages)

# calculate the year-to-date average
yearly_averages = df.groupby('category').resample('Y', on='date').mean()
print(yearly_averages)

# select the last two working days for each category
last_two_days = df.groupby('category').apply(lambda x: x.sort_index().tail(2))
print(last_two_days)

输出:

price
category date            
A        2022-12-01  15.0
B        2022-12-01  459.0
C        2022-12-01  402.0

                     price
category date            
A        2022-12-31  15.0
B        2022-12-31  459.0
C        2022-12-31  402.0

            category       date      price
category                      
A          17         A 2022-12-12     18
           16         A 2022-12-13     15
B          11         B 2022-12-12     51
           10         B 2022-12-13    874
C          17         C 2022-12-12     99
           16         C 2022-12-13     52

相关问题