Pandas多级索引DataFrame导出CSV时如何屏蔽重复索引值
Pandas MultiIndex导出CSV时掩码连续重复索引值的实现方案
问题说明
现有通过如下代码构造的带三级MultiIndex(索引列分别为c1、c2、c3)的DataFrame:
import numpy as np from itertools import product import pandas as pd c1 = np.arange(3,5,1) c2 = np.arange(7,9,1) c3 = np.arange(0,135,45) df= pd.DataFrame(list(product(c1, c2, c3)), columns=['c1', 'c2','c3']) df['c4'] = df.index df = df.set_index(['c1', 'c2','c3'])
直接调用to_csv()导出时,多级索引的每一层会在所有对应行填充重复值,其中按顺序排列的c1、c2层存在大量连续冗余内容,需要将连续重复的取值掩码为空,仅保留每组第一次出现的值。
实现步骤
当前MultiIndex是按c1、c2、c3的顺序有序排列的,不需要额外排序即可直接做连续重复值判断,处理流程如下:
- 先将多级索引重置为普通列,方便逐列做掩码处理
- 对需要去重连续值的
c1、c2列,用duplicated(keep='first')标记所有非首次出现的重复值位置,将这些位置的内容替换为空字符串 - 处理完成后导出CSV即可,不需要保留默认行索引时可加
index=False参数
完整处理代码:
# 重置索引为普通列 df_export = df.reset_index() # 对c1、c2列的连续重复值做掩码 for col in ["c1", "c2"]: df_export[col] = df_export[col].mask(df_export[col].duplicated(keep="first"), "") # 导出CSV df_export.to_csv("multiindex_dedup.csv", index=False)
导出效果
导出的CSV文件中:
c1列仅在取值切换的第一行显示对应数值,同取值的后续连续行均为空c2列仅在每个c1分组下取值切换的第一行显示对应数值,同取值的后续连续行均为空c3、c4列保留所有行的原始值,无修改
内容的提问来源于stack exchange,提问作者Jeroen
相关产品推荐
相关产品推荐

