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

如何用Pandas分组CSV重复邮箱行并合并站点列,导出CSV并解决空DataFrame问题

需求与解决方案

原始数据

用户的favsites.csv内容如下:

Emails                          Favorite Site                                                                                       
batman@email.com                something.com          
batman@email.com                hamburgers.com         
poisonivy@email.com             yonder.com              
superman@email.com              cookies.com            
catgirl@email.com               cattreats.com           
catgirl@email.com               fishcaviar.com          
catgirl@email.com               elegantfashion.com              
joker@email.com                 cards.com            
supergirl@email.com             nailart.com  

期望输出

形式一:同一邮箱对应站点在单元格内换行

Emails                          Favorite Site                                                                                       
batman@email.com                something.com          
                                hamburgers.com         
poisonivy@email.com             yonder.com              
superman@email.com              cookies.com            
catgirl@email.com               cattreats.com           
                                fishcaviar.com          
                                elegantfashion.com              
joker@email.com                 cards.com            
supergirl@email.com             nailart.com 

形式二:同一邮箱对应站点拆分为多列/同一列空格分隔

Emails                          Favorite Site                                                                                       
batman@email.com                something.com    hamburgers.com                                
poisonivy@email.com             yonder.com              
superman@email.com              cookies.com            
catgirl@email.com               cattreats.com    fishcaviar.com   elegantfashion.com              
joker@email.com                 cards.com            
supergirl@email.com             nailart.com 

问题分析

你当前代码的核心问题:

  • groupby(['Emails', 'Favorite Site'])是按邮箱+站点双重分组,等于没有合并重复邮箱的记录;
  • agg('sum')仅针对数值列生效,你的数据全是字符串列,因此返回空DataFrame。

解决方案

实现形式一(单元格内换行合并)

按邮箱分组,将同一邮箱的站点用换行符\n连接,导出时Pandas会自动用引号包裹含换行的单元格,确保CSV格式正确:

import pandas as pd

input_path = 'favsites.csv'
output_path = 'merged_form1.csv'

# 读取空格分隔的CSV(原始数据用空格分隔,需指定sep参数)
df = pd.read_csv(input_path, sep='\s+')
# 按邮箱分组,合并站点为换行分隔的字符串
merged_df = df.groupby('Emails')['Favorite Site'].agg('\n'.join).reset_index()
# 导出CSV,不保留索引
merged_df.to_csv(output_path, index=False)

实现形式二(两种可选方式)

方式1:同一列用空格分隔站点(匹配示例格式)

import pandas as pd

input_path = 'favsites.csv'
output_path = 'merged_form2.csv'

df = pd.read_csv(input_path, sep='\s+')
# 按邮箱分组,合并站点为空格分隔的字符串
merged_df = df.groupby('Emails')['Favorite Site'].agg(' '.join).reset_index()
merged_df.to_csv(output_path, index=False)

方式2:拆分为独立列(站点多列显示)

import pandas as pd

input_path = 'favsites.csv'
output_path = 'merged_form2_multi_col.csv'

df = pd.read_csv(input_path, sep='\s+')
# 按邮箱分组,将站点转为列表
grouped = df.groupby('Emails')['Favorite Site'].apply(list).reset_index()
# 将列表扩展为多列
expanded_df = pd.DataFrame(grouped['Favorite Site'].tolist(), index=grouped['Emails']).reset_index()
# 重命名列名
expanded_df.columns = ['Emails'] + [f'Favorite Site {i+1}' for i in range(expanded_df.shape[1]-1)]
expanded_df.to_csv(output_path, index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:05:24