python - 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
推荐阅读
- python - 通过浏览器访问端点时,CreateAPIView 使用 st() 函数返回 TypeError
- ios - 从 Laravel 发送 Firebase 推送通知
- graphql - 如何将 GraphQL 查询中的数据传递到以编程方式生成的页面上?
- python - 将两个数据框合并为一个新的数据框,其中唯一的项目标记为 1 或 0
- angular - 如何使用httpclient作为二进制文件以角度加载字体文件(ttf和otf)以使用opentype.js进行处理
- css - 如何在 LESS 中使用循环来为排版创建特定的类名?
- sql - Oracle查询从多维表中获取关系数据集结果
- javascript - Jquery - 仅在 .stable 类的表中,隐藏第二个 td 没有 innerHTML 的所有行
- delphi - 如何有条件地编译更新的 Indy 功能?
- javascript - Array#map() 中的异步/等待(Node.js,Express)