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

如何在Pandas中根据城市列的字符串值创建新分组列?

Pandas实现基于指定城市分组创建新列

问题描述

现有如下结构的DataFrame:

typecity
1dki jakarta
2jawa barat
3jawa tengah
4jawa timur
5sulawesi

需要基于city列创建名为city_group的新列,分组规则如下:

  • dki jakarta、jawa barat → jabo, jabar
  • jawa tengah、jawa timur → jateng, jatim
  • sulawesi → others

期望得到的结果:

typecitycity_group
1dki jakartajabo, jabar
2jawa baratjabo, jabar
3jawa tengahjateng, jatim
4jawa timurjateng, jatim
5sulawesiothers

当前尝试的代码仅能匹配单个字符串,需要扩展多匹配条件:

df.loc[df['city'].str.contains("dki jakarta"),'city_group'] = 'jabo, jabar'

解决方案

以下是几种可行的实现方式:

方法1:扩展str.contains的多匹配规则

利用正则表达式的管道符|分隔多个匹配目标,依次设置分组值,最后填充未匹配项:

import pandas as pd

# 构造原始数据
data = {
    'type': [1,2,3,4,5],
    'city': ['dki jakarta', 'jawa barat', 'jawa tengah', 'jawa timur', 'sulawesi']
}
df = pd.DataFrame(data)

# 匹配第一组城市
df.loc[df['city'].str.contains('dki jakarta|jawa barat'), 'city_group'] = 'jabo, jabar'
# 匹配第二组城市
df.loc[df['city'].str.contains('jawa tengah|jawa timur'), 'city_group'] = 'jateng, jatim'
# 剩余未匹配项设为others
df['city_group'] = df['city_group'].fillna('others')

方法2:使用映射字典(推荐,规则清晰)

创建城市与分组的映射字典,通过map方法直接赋值,未匹配项用fillna补充:

import pandas as pd

data = {
    'type': [1,2,3,4,5],
    'city': ['dki jakarta', 'jawa barat', 'jawa tengah', 'jawa timur', 'sulawesi']
}
df = pd.DataFrame(data)

# 定义城市-分组映射
city_group_map = {
    'dki jakarta': 'jabo, jabar',
    'jawa barat': 'jabo, jabar',
    'jawa tengah': 'jateng, jatim',
    'jawa timur': 'jateng, jatim',
    'sulawesi': 'others'
}

# 应用映射
df['city_group'] = df['city'].map(city_group_map).fillna('others')

方法3:使用numpy.select处理多条件分支

通过条件列表和对应值列表批量设置分组,适合更复杂的多分支场景:

import pandas as pd
import numpy as np

data = {
    'type': [1,2,3,4,5],
    'city': ['dki jakarta', 'jawa barat', 'jawa tengah', 'jawa timur', 'sulawesi']
}
df = pd.DataFrame(data)

# 定义条件和对应值
conditions = [
    df['city'].isin(['dki jakarta', 'jawa barat']),
    df['city'].isin(['jawa tengah', 'jawa timur'])
]
group_values = [
    'jabo, jabar',
    'jateng, jatim'
]

# 应用多条件赋值,默认值为others
df['city_group'] = np.select(conditions, group_values, default='others')

方法对比

  • 映射字典:代码最直观,维护成本低,适合城市列表固定的场景。
  • str.contains:支持模糊匹配(比如城市名有拼写变体时),灵活性更强。
  • numpy.select:适合多条件嵌套的复杂分组逻辑,可读性好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:30:51