我在Pandas groupby功能和时间序列方面遇到问题。我已经阅读了文档,但我看不出如何将聚合函数应用于多列,以及如何正确计算“聚合”的体积(平均值)的平均值
这是我导入CSV文件的代码:
#CSV Import
import pandas as pd
path = r'Z:\Python\30_Min_Data.txt'
from datetime import datetime
customdateparse = lambda x: datetime.strptime(x, '%Y/%m/%d %H:%M:%S.%f')
df = pd.read_csv(
path,
parse_dates={'DateTime': [0, 1]},
date_parser=customdateparse)
# Set the Date as the Index --> needed for Resampling
df.set_index('DateTime', inplace=True)
df.sort_index()
这是导入后的数据帧:
df
Out[3]:
Volume Session
DateTime
2020-12-16 08:00:00 1000 PRTH
2020-12-16 08:30:00 5000 PRTH
2020-12-16 09:00:00 1000 RTH
2020-12-16 09:30:00 3000 RTH
2020-12-17 08:00:00 2000 PRTH
2020-12-17 08:30:00 2000 PRTH
2020-12-17 09:00:00 2000 RTH
2020-12-17 09:30:00 2000 RTH
2020-12-18 08:00:00 1000 PRTH
2020-12-18 08:30:00 1000 PRTH
2020-12-18 09:00:00 1000 RTH
2020-12-18 09:30:00 1000 RTH
2019-11-18 08:00:00 1000 PRTH
2019-11-18 08:30:00 1000 PRTH
2019-11-18 09:00:00 1000 RTH
2019-11-18 09:30:00 1000 RTH
这就是我尝试的: 由于时间序列重新采样,它计算每天的平均值。 我希望它首先对值进行求和,然后计算平均值。 但它确实意味着每天的大量数据
#2.Volume: Average per Year & Session & Day
funcs_year = lambda idx: idx.year
(df
.groupby([funcs_year,'Session', pd.Grouper(freq='D')])
['Volume']
.mean()
)
Out[6]:
Session DateTime
2019 PRTH 2019-11-18 1000
RTH 2019-11-18 1000
2020 PRTH 2020-12-16 3000
2020-12-17 2000
2020-12-18 1000
RTH 2020-12-16 2000
2020-12-17 2000
2020-12-18 1000
Name: Volume, dtype: int64
这是我希望正确计算和显示结果的方式(我手动计算): 每日平均(平均)交易量(本年度和交易日分别显示):
Year Session Mean Volume
2020 RTH 3.333,33
PRTH 4.000,00
2019 RTH 2.000,00
PRTH 2.000,00
有人知道我错过了什么/做错了什么吗
根据您的问题,“总和”显示基于“年”的“总量总和”,而“平均数”显示基于“日平均数”的“总量平均数”,两者均按“会话”和“日期时间”分组。(刚刚使用了一些带有连接的groupy链接)
这对你有用吗:
请注意,“DateTime”现在应该是一列
我认为这计算出了每年和每节课每天的平均音量。你能试一试吗
相关问题 更多 >
编程相关推荐