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

如何筛选Pandas DataFrame使A、B列value_counts达指定值?

实现DataFrame按指定value_counts目标筛选的方法

完全可以实现这个需求,前提是当前各值的计数都不小于目标计数(你的数据满足这个条件)。以下是具体的Pandas实现方案:

步骤1:定义目标计数字典

首先把列A和列B的目标计数转换成Pandas Series,方便后续匹配:

import pandas as pd

# 假设原数据集为df
target_a = pd.Series({5:2, 10:7, 15:13, 20:10, 25:15, 30:8, 35:8}, name='target_a')
# 注意:原数据中B列的"-0"会被Pandas识别为0,所以目标字典中用0对应
target_b = pd.Series({-30:3, -20:6, -10:16, 0:25, 10:7, 20:4, 30:2}, name='target_b')

步骤2:分两次抽样满足双目标

先按列A的目标数量筛选,再在结果中按列B的目标数量筛选,确保最终两列的value_counts都符合要求:

# 第一步:按A列分组,每个值抽取目标数量的样本
df_filtered_a = df.groupby('A', group_keys=False).apply(
    lambda group: group.sample(n=target_a[group.name], random_state=42)
)

# 第二步:在A列筛选后的结果中,按B列分组抽取目标数量的样本
df_final = df_filtered_a.groupby('B', group_keys=False).apply(
    lambda group: group.sample(n=target_b[group.name], random_state=42)
)

验证结果

执行以下代码可以验证筛选后的结果是否符合目标:

print("列A的value_counts结果:")
print(df_final['A'].value_counts().sort_index())
print("\n列B的value_counts结果:")
print(df_final['B'].value_counts().sort_index())

补充说明

  • random_state=42用于保证抽样结果可复现,不需要固定结果的话可以去掉这个参数。
  • 如果担心两次抽样后某列的目标数量不满足(你的数据不存在这个问题),可以调整抽样顺序,比如先按B列筛选再按A列筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:07:04