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

如何按Region分组处理DataFrame并重组数据结构?

DataFrame按多列地区分组重组的实现方法

原始DataFrame格式

words ; in ; region1 ; region2
mars ; france ; marseille 3 ; marseille 1
lil ; france; lille 
marig ; italy; marseille 3 ; nantes 3

目标输出格式

regions ; words_list ; in_list
marseille 3 ; ["mars","marig"] ; ["france","italy"]
marseille 1 ; ["mars"] ; ["france"]
lille ; ['lil'] ; ['france']
nantes 3; ["marig"] ; ['italy'] 

实现方案(Python + Pandas)

1. 读取并预处理数据

先读取原始数据,处理分号前后的空格,同时重命名冲突列名:

import pandas as pd
from io import StringIO

# 示例数据(实际可用pd.read_csv读取本地文件)
data = """words ; in ; region1 ; region2
mars ; france ; marseille 3 ; marseille 1
lil ; france; lille 
marig ; italy; marseille 3 ; nantes 3"""

df = pd.read_csv(StringIO(data), sep='\s*;\s*', engine='python')
# 重命名"in"列避免与Python关键字冲突
df.rename(columns={'in': 'country'}, inplace=True)

2. 转换为长格式数据

把region1和region2两列拆分为多行,保留关联的words和country信息,并过滤空值:

# 宽表转长表,提取所有地区记录
long_df = df.melt(
    id_vars=['words', 'country'],
    value_vars=['region1', 'region2'],
    value_name='regions'
)
# 移除无地区记录的无效行
long_df = long_df.dropna(subset=['regions'])

3. 分组聚合生成结果

按地区分组,将对应的words和country聚合为列表:

# 按地区分组,聚合关联的词汇和国家信息
result = long_df.groupby('regions').agg(
    words_list=('words', list),
    in_list=('country', list)
).reset_index()

4. 匹配目标输出格式(可选)

如果需要完全匹配目标的字符串格式,可做格式化调整:

# 调整列表的引号格式,统一为目标样式
result['words_list'] = result['words_list'].apply(lambda x: str(x).replace("'", '"'))
result['in_list'] = result['in_list'].apply(lambda x: str(x))

# 输出分号分隔的结果
print(result.to_csv(sep=';', index=False))

运行上述代码后,就能得到符合要求的分组结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:15:36