如何在Pandas中定位聚合后符合条件的分类箱数据?
如何从DataFrame中筛选出属于有效箱的数据?
我已经完成了数据分箱、按箱分组统计条目数,并筛选出了样本数达标的有效箱
valid_bins。现在想知道怎么在原始DataFramedf中只保留这些有效箱对应的数据?我的前置代码如下:
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_
相关产品推荐
相关产品推荐

