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

如何在Pandas DataFrame中按索引分组生成状态与国家组合分类?

Pandas按索引分组实现Nation/Status组合分类

1. 先明确你的分类规则

先把需要的Nation/Status Mix分类逻辑理清楚,比如假设你要的五类是(可根据实际需求修改):

  • 国内活跃:Nation为'CN'且Status='Active'
  • 国内非活跃:Nation为'CN'且Status='Inactive'
  • 海外活跃:Nation≠'CN'且Status='Active'
  • 海外非活跃:Nation≠'CN'且Status='Inactive'
  • 混合类型:同一Single Client Index下存在多种Nation/Status组合

2. 准备示例数据(和你的结构一致)

先模拟一个数据集方便演示,你可以直接替换成自己的DataFrame:

import pandas as pd

data = {
    'Single Client Index': ['A001', 'A001', 'A002', 'A003', 'A003', 'A004'],
    'Nation': ['CN', 'CN', 'US', 'CN', 'US', 'JP'],
    'Status': ['Active', 'Active', 'Inactive', 'Active', 'Active', 'Inactive'],
    'Client Name': ['张三', '张三', 'John', '李四', '李四', 'Yamada']
}
df = pd.DataFrame(data)

3. 核心:自定义分组分类函数

写一个函数,对每个分组判断属于哪种分类:

def get_mix_category(group):
    # 提取当前分组所有不重复的Nation+Status组合
    unique_pairs = group[['Nation', 'Status']].drop_duplicates().values.tolist()
    # 先判断是否是混合类型(多种组合)
    if len(unique_pairs) > 1:
        return '混合类型'
    # 单一组合的情况,匹配分类
    nation, status = unique_pairs[0]
    if nation == 'CN':
        return '国内活跃' if status == 'Active' else '国内非活跃'
    else:
        return '海外活跃' if status == 'Active' else '海外非活跃'

# 按Single Client Index分组,应用分类函数
category_result = df.groupby('Single Client Index').apply(get_mix_category).reset_index(name='Nation/Status Mix')

4. 合并分类结果到原数据(可选)

如果需要把分类和原数据绑定,用merge:

final_df = pd.merge(df, category_result, on='Single Client Index')

5. 查看最终结果

运行print(final_df)会输出:

Single Client Index Nation    Status Client Name Nation/Status Mix
0               A001     CN    Active          张三            国内活跃
1               A001     CN    Active          张三            国内活跃
2               A002     US  Inactive         John          海外非活跃
3               A003     CN    Active          李四            混合类型
4               A003     US    Active          李四            混合类型
5               A004     JP  Inactive       Yamada          海外非活跃

注意事项

  • 你可以完全修改get_mix_category里的逻辑,比如调整国家代码、状态值,或者新增更多分类
  • drop_duplicates()是关键,避免同一分组内重复的记录干扰判断
  • 如果你的DataFrame很大,groupby.apply效率足够应付大部分场景,若要优化可以用transform结合逻辑判断,但初学者用apply更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:15:03