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

如何用列表筛选Pandas DataFrame且匹配列表中元素的出现次数

实现思路

先统计目标列表中各元素的出现频次,再对DataFrame的目标列分组后生成组内序号,筛选出组内序号不超过对应元素频次的行即可。

完整代码示例

import pandas as pd
from collections import Counter

# 原始数据
my_list = [1,1,2,3,4,4]
my_df = pd.DataFrame({
    'col_1': ['a','b','c','d','e','f','g','h'],
    'col_2': [1,1,2,3,3,4,4,4]
})

# 统计列表元素出现频次
count_map = Counter(my_list)
# 分组生成组内序号后筛选
result = my_df[my_df.groupby('col_2').cumcount() + 1 <= my_df['col_2'].map(count_map)]

print(result)

输出结果

col_1  col_2
0     a      1
1     b      1
2     c      2
3     d      3
5     f      4
6     g      4

逻辑说明

  • groupby('col_2').cumcount()会给每个col_2分组内的行生成从0开始的递增序号,加1后转为从1开始计数
  • map(count_map)会把col_2的每个值替换为它在目标列表中的出现次数
  • 筛选逻辑会自动保留每个值对应的前N行,N为该值在列表中的出现次数,最终返回的行数和列表长度完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:01