如何将pandas dataframe单列值传播到其他列并去除重复行
实现方案
核心思路
先建立口味到目标分类的映射规则,再通过透视表将长表转换为宽表,空值自动填充为空字符串。该方案适配大体积Excel数据处理,pandas透视表运算效率足够支撑百万级行数据处理。
具体代码实现
import pandas as pd # 1. 定义口味到目标列的映射规则,后续新增口味直接在该字典中补充即可 flavor_category_map = { 'vanilla': 'Favorite Vanilla-based Ice Cream', 'chocolate': 'Favorite Chocolate-based Ice Cream', 'strawberry': 'Favorite Berry Ice Cream', 'butter pecan': 'Favorite Other Ice Cream', 'mint chocolate chip': 'Favorite Other Ice Cream' } # 示例原始数据导入,实际使用时替换为pd.read_excel读取你的Excel文件即可 data = [['tom', 10, 'vanilla'], ['tom', 10, 'chocolate'], ['nick', 15, 'strawberry'], ['nick', 15, 'butter pecan'], ['nick', 15, 'mint chocolate chip'], ['juli', 14, 'strawberry'], ['juli', 14, 'chocolate'], ['juli', 14, 'vanilla']] df = pd.DataFrame(data, columns = ['Name', 'Age', 'Favorite Ice Cream']) # 2. 给每行数据新增分类列 df['category'] = df['Favorite Ice Cream'].map(flavor_category_map) # 3. 透视表转换为宽表 df2 = df.pivot_table( index=['Name', 'Age'], # 保留不变的基础信息列 columns='category', # 分类列作为新的表头 values='Favorite Ice Cream', # 填充的值为冰淇淋口味 aggfunc='first', # 若同一个人同一分类下有多个口味,默认取第一个,要保留所有可改为lambda x: ','.join(x) fill_value='' # 无匹配值时填充空字符串 ).reset_index() # 4. 按要求调整列顺序 df2 = df2[['Name', 'Age', 'Favorite Vanilla-based Ice Cream', 'Favorite Chocolate-based Ice Cream', 'Favorite Berry Ice Cream', 'Favorite Other Ice Cream']] # 最终结果可以用df2.to_excel('处理后结果.xlsx', index=False)导出
结果验证
运行后df2的输出和你要求的目标格式完全一致。
内容的提问来源于stack exchange,提问作者One2three
相关产品推荐
相关产品推荐

