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()

但我没有得到我需要的。。。

有人能帮我吗?非常感谢!

我无法想象一种完全矢量化的方式,所以我会迭代唯一的会话编号来构建一个新的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

最新更新