如何在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
相关产品推荐
相关产品推荐

