我想使用 groupby
和 mean
计算每个 ID 的平均值。但是,我只需要 Date
介于年份 2016-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'])['金额'].agg('mean')
它考虑了所有行,得出平均值为 333.3
。如何排除 Date
为 2018 年的行(产生平均值 (250+400)/2=325
)?
最佳答案
您需要使用查询
进行预过滤步骤:
df.query('Date.dt.year != 2018').groupby('ID').mean()
Amount
ID
STCK123 325
eval
、query
和相关参数的更多用途可以在我的文章中找到:Dynamic Expression Evaluation in pandas using pd.eval()
参见here了解在调用groupby
之前删除行的更多方法。
您还可以屏蔽
这些行,而不必删除它们。 NaN 被排除在 GroupBy
聚合之外。
df.mask(df.Date.dt.year == 2018).groupby('ID').mean()
Amount
ID
STCK123 325.0
关于python - Pandas GroupBy 和日期范围内的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280746/