首页 > 解决方案 > Python - 根据其他列值应用滚动中位数

问题描述

我正在尝试计算在几个工作会话中收集的结果的中值。

我的数据看起来像这样:

df = pd.DataFrame(
    {"Session" : [1 ,1, 2, 2, 3, 3],
    "Value" : [1, 2, 3, 4, 5, 6]})

我想计算滚动会话数中所有值的中位数。就像会话 1 和 2 的所有值的中位数一样,然后是会话 2 和 3 ...

现在我唯一能做的就是通过这样做来计算中位数的平均值:

summary = pd.DataFrame()
summary['median_session'] = df.groupby('Session').Value.median()
summary['mean_last_two_median'] = summary.mean_session.rolling(2).mean()

但这并不完全正确。

我试过了 :

summary = pd.DataFrame()
summary['mean_two_session'] = df.groupby('Session').rolling(2).median()

但我没有得到我需要的东西......

有人可以帮我吗?非常感谢 !

标签: pythonpandasrolling-computation

解决方案


我无法想象一种完全矢量化的方式,所以我会迭代唯一的会话编号来构建一个新的 DataFrame:

resul = pd.DataFrame([[sess, sess+1, df.loc[df['Session'].between(sess, sess+1),
                                            'Value'].median()]
                      for sess in df['Session'].unique()[:-1]],
                     columns=['Session1', 'Session2', 'Median'])

它给:

   Session1  Session2  Median
0         1         2     2.5
1         2         3     4.5

推荐阅读