Pandas如何按公共列分组实现同组列值仅首行显示效果
你之前的操作没生效有两个原因:一是列名拼写错误,set_index里把instrument_type错写成了iunstrument_type;二是pandas的多级索引稀疏显示开关可能被关闭,导致重复的索引值全部显示。
实现方法
根据你的使用场景选对应方案即可:
1 仅用于展示/打印,不修改原始数据
直接修改pandas的显示配置,不需要改动原DataFrame结构,后续做分组、计算等操作不受影响:
# 开启多级索引稀疏显示(重复的上层索引值自动留空) pd.set_option('display.multi_sparse', True) # 设置两级索引后打印即可 print(dfs.set_index(['month', 'instrument_type']))
如果后续要恢复默认的全量索引显示,执行pd.reset_option('display.multi_sparse')即可。
2 需要实际修改DataFrame内容,用于导出表格等场景
如果要把month列的重复值实际替换为空,方便导出到Excel、复制到文档,用以下代码:
# 先确保同month的行是连续排列的,已经排好序可跳过这行 dfs = dfs.sort_values(by='month', ignore_index=True) # 将同组非首行的month值替换为空字符串 dfs.loc[dfs['month'].duplicated(), 'month'] = ''
执行完后直接打印dfs就能得到你预期的效果。
注意:该方法会实际修改month列的值,后续如果需要基于month字段做聚合、筛选操作,不要用这个方案,优先选择第一种仅修改显示配置的方法。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

