如何修改Pandas代码实现透视表频次值按组唯一显示?
问题:如何在Pandas透视表中避免频次值重复显示
原始DataFrame
Name Number File_name Frequency 0 A item 1 path 1 2 1 A item 1 path 2 2 2 A item 2 path 1 4 3 A item 2 path 2 4 4 A item 3 path 1 1 5 A item 2 path 3 4 6 A item 2 path 4 4
预期输出格式
Name Number File_name Frequency A item 1 path 1 2 path 2 item 2 path 1 4 path 2 path 3 path 4 item 3 path 1 1
当前尝试代码及结果
尝试代码:
df = pd.read_excel(path) df["Unique ID"] = df["Name"] + " " + df["Number"] # 创建额外列计算频次 df['frequency'] = df['Unique ID'].map(df['Unique ID'].value_counts()) pivot = pd.pivot_table(df, index=["Name", "Number", "File_name"], values="frequency", fill_value=0) print(pivot)
得到的结果:
Name Number File_name Frequency A item 1 path 1 2 path 2 2 item 2 path 1 4 path 2 4 path 3 4 path 4 4 item 3 path 1 1
解决方案
Pandas默认透视表会重复显示层级内的相同值,要实现预期的合并显示效果,分两种场景处理:
场景1:Jupyter/HTML环境(可视化显示)
可以利用Pandas的style功能隐藏重复的频次值:
# 先生成你的透视表 pivot = pd.pivot_table(df, index=["Name", "Number", "File_name"], values="Frequency", fill_value=0) # 标记需要隐藏的重复频次行:同一(Name, Number)组内,除第一个File_name外的其他行 mask = pivot.groupby(level=['Name', 'Number'])['Frequency'].transform(lambda x: x.duplicated()) # 应用样式隐藏重复值 styled_pivot = pivot.style.apply( lambda x: ['visibility: hidden' if v else '' for v in mask], subset=['Frequency'] ) # 显示处理后的结果 display(styled_pivot)
场景2:终端/命令行输出(文本格式)
需要手动遍历数据,控制重复值的显示:
# 先重置索引方便遍历 pivot_df = pivot.reset_index() # 初始化变量记录上一行的值 prev_name = None prev_number = None prev_freq = None # 打印表头 print(f"{'Name':<8} {'Number':<10} {'File_name':<10} {'Frequency':<10}") # 遍历每一行,控制重复值显示 for _, row in pivot_df.iterrows(): # 仅当当前值与上一行不同时显示,否则留空 display_name = row['Name'] if row['Name'] != prev_name else '' display_number = row['Number'] if row['Number'] != prev_number else '' display_freq = row['Frequency'] if row['Frequency'] != prev_freq else '' # 打印当前行 print(f"{display_name:<8} {display_number:<10} {row['File_name']:<10} {display_freq:<10}") # 更新上一行记录 prev_name = row['Name'] prev_number = row['Number'] prev_freq = row['Frequency']
终端输出结果:
Name Number File_name Frequency A item 1 path 1 2 path 2 item 2 path 1 4 path 2 path 3 path 4 item 3 path 1 1
内容的提问来源于stack exchange,提问作者SMS
相关产品推荐
相关产品推荐

