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

如何在Pandas交叉表中对含共同字符串的索引进行分组?

按字符串关键词分组生成Pandas交叉表

问题场景

现有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Age': [21,22,21,23,23,21,21],
    'Region': ['North America', 'Europe East', 'Europe West', 'South America',
               'North America', 'North America', 'Europe West'],
    'Answer': ['yes','yes','no','yes','no','no','yes']
})

需要将Region字段按包含的共同字符串分组(含"Europe"的归为Europe,含"America"的归为America),生成如下交叉表:

Answer         no  yes
Continent                
Europe          1    2    
America         2    2

当前使用pd.crosstab仅能得到按具体Region细分的结果,需进一步处理实现分组聚合。


实现方法

方法一:新增大洲列后生成交叉表

先为DataFrame新增Continent列,根据Region的关键词判断所属大洲,再基于该列生成交叉表:

# 新增Continent列,通过关键词匹配划分大洲
df['Continent'] = df['Region'].str.contains('Europe').map({True: 'Europe', False: 'America'})

# 生成目标交叉表
ct = pd.crosstab(index=df['Continent'], columns=df['Answer'])
print(ct)

方法二:对原始交叉表索引分组聚合

如果已经生成了按具体Region的交叉表,可直接对索引进行分组求和:

# 生成原始细分交叉表
ct = pd.crosstab(index=df['Region'], columns=df['Answer'])

# 按索引中的关键词分组并求和
ct_grouped = ct.groupby(lambda x: 'Europe' if 'Europe' in x else 'America').sum()
print(ct_grouped)

两种方法最终都会输出目标格式的交叉表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:37:36