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

如何基于另一DataFrame的分箱条件统计DataFrame中的值频次?

解决DataFrame分箱降雨频次统计的报错与逻辑问题

报错原因

你用df2.iloc[i]取出的是带索引的Series(索引为bin limits),而rain的索引是多层索引(longitude/latitude/year),两者索引不匹配,直接比较就会触发ValueError: Can only compare identically-labeled Series objects。同时你的循环逻辑只判断了rain>limit,没有处理分箱的区间范围,统计逻辑不正确。

正确解法

方法1:修正循环逻辑

先把分箱上限提取为标量列表,然后逐个统计每个区间的频次:

import pandas as pd

# 提取分箱上限为列表
limits = df2['bin limits'].tolist()
rain = df1['tp1']
counts = []

# 第一个分箱:降雨值 <= 第一个上限
counts.append(len(rain[rain <= limits[0]]))

# 中间分箱:降雨值 > 前一个上限 且 <= 当前上限
for i in range(1, len(limits)):
    mask = (rain > limits[i-1]) & (rain <= limits[i])
    counts.append(len(rain[mask]))

# 将统计结果赋值给df2
df2['count'] = counts

方法2:用pandas.cut高效实现

利用pandas内置的分箱函数cut,更简洁高效:

import pandas as pd

limits = df2['bin limits'].tolist()
# 定义分箱边界:左边界设为0(降雨非负),加上所有上限,最后加无穷大覆盖剩余值
bins = [0] + limits + [float('inf')]
# 对降雨数据分箱
rain_bins = pd.cut(df1['tp1'], bins=bins)
# 统计每个箱的频次并排序
bin_counts = rain_bins.value_counts().sort_index()
# 将对应区间的频次赋值给df2(去掉最后一个无穷大区间的统计)
df2['count'] = bin_counts.values[:-1]

验证结果

根据你提供的df1数据,最终df2的count列结果应为:

bin limitscount
16.6559702
18.2048424
19.5265241
20.8526571
22.3367311
24.2119051
27.1438202

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:25:25