You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何对DataFrame按行列双维度分箱聚合指定列均值

双维度分箱聚合实现方法

直接通过双字段分箱+透视聚合即可实现需求,和你原有单维度分箱的区间规则完全兼容,不需要重构原有分箱逻辑。

核心实现代码

import pandas as pd
import numpy as np

# 沿用你之前定义的分箱区间规则
dir_bins = np.linspace(0, 360, 37)   # 风向每10°一个分箱,匹配0-10、10-20...350-360的列格式
shear_bins = np.linspace(0.00, 0.80, 17) # 风切变每0.05一个分箱,匹配0.00-0.05格式的行索引

# 透视表实现双维度聚合
ratio_pivot = pd.pivot_table(
    df,
    values="Ratio",
    index=pd.cut(df["Shear"], bins=shear_bins),
    columns=pd.cut(df["Dir_117m"], bins=dir_bins),
    aggfunc="mean",
    fill_value=0 # 空分组填充0,和你原有单维度分箱的fillna逻辑一致
)

# 可选:将默认的Interval类型索引/列名转为你样例中的字符串格式
ratio_pivot.columns = [f"{int(col.left)}-{int(col.right)}" for col in ratio_pivot.columns]
ratio_pivot.index = [f"{idx.left:.2f}-{idx.right:.2f}" for idx in ratio_pivot.index]
ratio_pivot.index.name = "Shear"

等效groupby写法

如果你更熟悉groupby语法,用unstack转换行列结构即可得到完全一致的结果:

ratio_pivot = df.groupby([
    pd.cut(df["Shear"], shear_bins),
    pd.cut(df["Dir_117m"], dir_bins)
])["Ratio"].mean().unstack(fill_value=0)
# 后续索引重命名逻辑和上面一致

扩展说明

  • 如果需要同时统计每个分箱的样本数量,只需要把aggfunc参数改为["mean", "count"],即可同时输出均值和分组计数,不需要单独写统计函数。
  • 如果数据存在超出分箱范围的异常值(比如Shear大于0.8、风向不在0-360区间),可以手动扩展bins上下限,或者在pd.cut中加参数include_lowest=True避免数据被丢弃。

内容的提问来源于stack exchange,提问作者Lucas Willrich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:03:20