【发布时间】:2019-12-29 21:28:07
【问题描述】:
我有四列包含过去 4 年的销售量。我想计算中位数,然后根据条件(+-25% 的中位数)排除列值来计算平均值。
df = df[['Date','ID','amount']] # df has daily data
df['dayofYear'] = df['Date'].dt.dayofyear
df['Year_Lag1']= df.groupby(['ID','dayofYear'])['amount'].transform(lambda x: x.shift(1))
df['Year_Lag2']= df.groupby(['ID','dayofYear'])['amount'].transform(lambda x: x.shift(2))
df['Year_Lag3']= df.groupby(['ID','dayofYear'])['amount'].transform(lambda x: x.shift(3))
df['Year_Lag4']= df.groupby(['ID','dayofYear'])['amount'].transform(lambda x: x.shift(4))
df['YearLag_median']= df[['Year_Lag1','Year_Lag2','Year_Lag3','Year_Lag4']].median(axis=1) #median amount on same date (is there a better way to calculate median by avoiding outliers)
如何通过避免位于中位数 +- 25% 的四列中的值来计算平均值。
假设Year_Lag1 = 5000, Year_Lag2= 230, Year_Lag3=4500, Year_Lag4= 4300。
如何通过避免Year_Lag2 值来计算平均值。
我希望对数据框中的所有行都执行此操作。
(如果有人可以通过避免异常值来帮助更好地计算中位数) 数据集[数据具有 1 月 2 日和 3 日 (2014,15,16,17,18) 的值。 Year_Lag1(shift(1)) 具有上一年 1 月 2 日和 3 日的值。 Year_Lag2(shift(2) 具有从去年到去年的值) 等等..]
最后一行是我想忽略 589.0 来计算平均值的示例。
[1]:https://i.stack.imgur.com/26Dvp.pngenter code here
【问题讨论】:
-
+-25 % 是针对每一行计算还是针对整个行计算?
-
它必须是每一行
-
正如一个答案中所建议的,如果您可以分享您的数据框样本会很好
-
我已添加图片以供参考。相关场景的具体示例请参考最后一行。
标签: python-3.x pandas dataframe median