pandas-groupby - 按另一列的唯一对计算一列的平均值
问题描述
我有一个熊猫数据框如下:
df = pd.DataFrame({'start': {0: 365, 1: 365, 2: 365, 3: 365, 4: 356, 5: 261, 6: 240, 7: 238},
'end': {0: 240, 1: 261, 2: 356, 3: 238, 4: 365, 5: 365, 6: 365, 7: 365},
'value': {0: 585, 1: 567, 2: 191, 3: 186, 4: 196, 5: 545, 6: 564, 7: 184}})
这是数据框的样子,
start end value
1 365 240 585
2 365 261 567
3 365 356 191
4 365 238 186
5 356 365 196
6 261 365 545
7 240 365 564
8 238 365 184
有四对独特的起始端。我想要一个数据框,每个独特的对都有一个平均值。输出数据框如下所示:
start end value
1 365 240 574.5
2 365 261 556
3 365 356 193.5
4 365 238 185
groupby
我知道我可以通过使用和函数来获得唯一对的出现次数size
,但无法在value
每个唯一对的列上应用平均值。Pandas 的函数是否grouper
可以解决这个问题?
解决方案
IIUC,您想对开始和结束进行排序,然后对这两列进行分组平均:
df[["start", "end"]] = -np.sort(-df.iloc[:, :2], axis=1)
df.groupby(["start", "end"]).value.mean().reset_index()
# out:
start end value
0 365 238 185.0
1 365 240 574.5
2 365 261 556.0
3 365 356 193.5
推荐阅读
- java - 如何修复:当我更新实体时,休眠中的“无法提交 JDBC 连接”错误
- visual-studio-code - 如何使用键盘快捷键保存和关闭选项卡?
- python - 使用 PyOpenGL 从多个角度呈现纹理投影
- html - 获取具有相同名称的多个表单值(布尔大小写)
- html - 当我在 AMP 页面中添加地图 iframe 时显示错误
- javascript - Google 标记信息窗口中的 Lit-HTML 按钮事件
- c++ - 如何使用 Bazel 为 iOS 打包仅包含标头的 C++ 库?
- osgi - 使用 Domino Designer 10 进行 OSGI 插件开发
- javascript - 验证不会忽略字段
- swisscomdev - 尝试删除 s3 存储服务的服务密钥时失败