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

求助:筛选同时满足组织与国家Top2频次的Pandas数据

Pandas筛选同时属于Top2国家和Top2组织的data_fingerprint

问题说明

给定以下DataFrame:

country     data_fingerprint   organization     
US          111                Tesco         
UK          222                IBM           
US          111                Yahoo           
PY          333                Tesco
US          111                Boeing   
CN          333                TCS  
NE          458                Yahoo
UK          678                Tesco

需要筛选出同时属于出现次数Top2的组织和出现次数Top2的国家对应的data_fingerprint。其中组织Top2为Tesco、Yahoo,国家Top2为US、UK,期望输出:

data_fingerprint
111
678

用户尝试的代码未得到有效数据:

# First find top 2 occurances of organization
nd = df['organization'].value_counts().groupby(level=0, group_keys=False).head(2)
# Then checking if the organization exist in the complete dataframe and filtering those rows
new = df["organization"].isin(nd)

错误原因

df['organization'].value_counts()返回的是索引为组织名称、值为出现次数的Series。使用head(2)后,nd的内容是Top2组织的次数(如Tesco:3、Yahoo:2),而isin(nd)是判断组织名称是否等于这些次数值,自然匹配不到任何数据。正确的做法是取nd的索引(即组织名称)来做匹配。

正确实现代码

import pandas as pd

# 构造示例DataFrame
data = {
    'country': ['US', 'UK', 'US', 'PY', 'US', 'CN', 'NE', 'UK'],
    'data_fingerprint': [111, 222, 111, 333, 111, 333, 458, 678],
    'organization': ['Tesco', 'IBM', 'Yahoo', 'Tesco', 'Boeing', 'TCS', 'Yahoo', 'Tesco']
}
df = pd.DataFrame(data)

# 获取出现次数Top2的国家列表
top2_countries = df['country'].value_counts().head(2).index.tolist()
# 获取出现次数Top2的组织列表
top2_organizations = df['organization'].value_counts().head(2).index.tolist()

# 筛选同时满足国家和组织条件的行
filtered_rows = df[(df['country'].isin(top2_countries)) & (df['organization'].isin(top2_organizations))]

# 提取目标字段并去重(匹配期望输出格式)
result = filtered_rows['data_fingerprint'].drop_duplicates().reset_index(drop=True)
print(result)

代码说明

  1. 获取Top2列表:value_counts()统计频次,head(2)取前两名,.index提取对应的国家/组织名称,转成列表用于后续筛选。
  2. 布尔索引筛选:用&连接两个条件,同时匹配Top2国家和Top2组织。
  3. 去重处理:原始数据中同一data_fingerprint可能对应多个符合条件的行,用drop_duplicates()去重后得到期望结果。

输出结果:

0    111
1    678
Name: data_fingerprint, dtype: int64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24