python - Pandas GroupBy 和日期范围内的平均值
问题描述
我想使用groupby
和计算每个 ID 的平均值mean
。但是,我只需要Date
year2016-01-01
和2017-12-31
.
d = {'ID': ['STCK123', 'STCK123', 'STCK123'], 'Amount': [250, 400, 350],
'Date': ['2016-01-20', '2017-09-25', '2018-05-15']}
data = pd.DataFrame(data=d)
data = data[['ID', 'Amount', 'Date']]
data['Date'] = pd.to_datetime(data['Date'])
这给出了以下df:
ID Amount Date
STCK123 250 2016-01-20
STCK123 400 2017-09-25
STCK123 350 2018-05-15
当我使用:
data.groupby(['ID'])['Amount'].agg('mean')
它将所有行都考虑在内,因此平均值为333.3
。如何排除Date
2018 所在的行(产生 的平均值(250+400)/2=325
)?
解决方案
您需要一个预过滤步骤query
:
df.query('Date.dt.year != 2018').groupby('ID').mean()
Amount
ID
STCK123 325
在我的文章中可以找到更多关于eval
、和相关参数的用途:使用 pd.eval() 在 pandas 中进行动态表达式评估query
有关在调用之前删除行的更多方法,请参见此处。groupby
您也可以mask
使用这些行,而不必删除它们。NaN 被排除在GroupBy
聚合之外。
df.mask(df.Date.dt.year == 2018).groupby('ID').mean()
Amount
ID
STCK123 325.0
推荐阅读
- arrays - 如何修复致命错误:Swift Tableview 中的索引超出范围 - Swift // 已解决
- python - 交换轴Seaborn热图python
- python - PyCharm 可以按正确的顺序显示变量的字段吗?
- python - 如何在 Jetson Tx2 中安装特定的 tensorflow 版本?
- azure - 使用 rest api 在 Azure ADSL Gen 2 存储帐户中创建空文件夹
- python - 在控制台(Python、Windows)中启动脚本之前输入输入?
- joi - 如何在 Joi 的另一个字段的错误消息中包含一个字段值
- node.js - 如何在代理中添加 api-key 查询参数时使用 fastify-http-proxy 保留请求查询
- python - 在链接列表中绑定 python tkinter 按钮命令以打开特定链接?
- google-bigquery - 有没有办法以连续的顺序保存和运行 Big Query 代码?