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

如何在Pandas中定位聚合后符合条件的分类箱数据?

如何从DataFrame中筛选出属于有效箱的数据?

我已经完成了数据分箱、按箱分组统计条目数,并筛选出了样本数达标的有效箱valid_bins。现在想知道怎么在原始DataFrame df中只保留这些有效箱对应的数据?

我的前置代码如下:

import pandas as pd
import numpy as np
A = np.random.random(10000)
bins = np.arange(0, max(A), 0.03)
data_bins = pd.cut(A, bins = bins, precision = 100)
df = pd.DataFrame({"A": A, "bin": data_bins})\
.sort_values(by = ["bin"])\
.reset_index(drop = True)\
.dropna()
print(df.head())
# 示例:仅保留条目数超过310的箱
valid_bins = df.groupby("bin")["A"].count().query("A > 310")
print(valid_bins)

解决方案

你可以通过以下几种简单高效的方法实现需求:

方法1:利用isin()匹配有效箱索引

因为valid_bins的索引就是我们需要保留的箱标签,直接通过isin()方法就能筛选出对应行:

# 筛选属于有效箱的数据
filtered_df = df[df['bin'].isin(valid_bins.index)]
print(filtered_df.head())

方法2:通过内连接(merge)筛选

把valid_bins转换为DataFrame后,和原始df做内连接,只保留匹配的记录:

# 将valid_bins转为带bin列的DataFrame
valid_bins_df = valid_bins.reset_index().rename(columns={'A': 'count'})
# 内连接过滤数据,最后移除统计列
filtered_df = pd.merge(df, valid_bins_df, on='bin', how='inner').drop(columns='count')
print(filtered_df.head())

方法3:分组后直接过滤(可选)

如果不想单独生成valid_bins,也可以直接在分组阶段完成过滤,但你已经有了valid_bins的话,前两种方法更高效:

# 基于分组内的条目数直接过滤
filtered_df = df.groupby('bin').filter(lambda x: len(x) > 310)
print(filtered_df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:12