我正在尝试计算在几个工作会话中收集的结果的中值。
我的数据是这样的:
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