熊猫在日期范围内的按和均值

时间:2019-01-20 20:37:36

标签: python pandas dataframe group-by

我想使用groupbymean计算每个ID的平均值。但是,我只需要Date2016-01-012017-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)的行?

1 个答案:

答案 0 :(得分:1)

您需要使用query进行预过滤的步骤:

df.query('Date.dt.year != 2018').groupby('ID').mean()

         Amount
ID             
STCK123     325

evalquery的更多用法以及相关参数可以在我的文章中找到:Dynamic Expression Evaluation in pandas using pd.eval()

有关在调用groupby之前删除 行上的更多方法,请参见here


您也可以mask行,而不必删除它们。 NaN被排除在GroupBy聚合之外。

df.mask(df.Date.dt.year == 2018).groupby('ID').mean()

         Amount
ID             
STCK123   325.0