如何在特定列去除重复值且保留关联行并绘制柱状图
特定列去重保留关联行 + 柱状图绘制方案
首先先明确你的需求和期望效果:
输入数据
Date Market Quantity 4/2/2018 Indonesia 1000 4/2/2018 Australia 500 4/2/2018 India 300 4/2/2018 USA 500 4/2/2018 Germany 200 5/2/2018 India 400 5/2/2018 Japan 400 5/2/2018 Russia 457 6/2/2018 Austria 260 6/2/2018 Swiss 700 6/2/2018 USA 1200 6/2/2018 Indonesia 400
期望输出
Date Market Quantity 4/2/2018 Indonesia 1000 Australia 500 India 300 USA 500 Germany 200 5/2/2018 India 400 Japan 400 Russia 457 6/2/2018 Austria 260 Swiss 700 USA 1200 Indonesia 400
一、实现Date列去重但保留所有关联行
你要的效果是让重复的日期仅在首次出现时显示,后续同一日期的行隐藏日期值,同时保留所有行的市场和销量数据。下面分两种常用工具给出具体实现方法:
1. Excel 快速操作步骤
假设你的数据放在A1:C12区域(表头在第一行):
- 在D2单元格输入公式:
=IF(A2=A1,"",A2) - 将D2单元格的公式下拉填充到所有数据行
- 此时D列就是处理后的日期列,你可以隐藏原始A列,把D列重命名为
Date,就能得到你想要的输出格式
2. Python Pandas 实现代码
如果你习惯用代码处理数据,用Pandas可以一键完成:
import pandas as pd # 读取或定义你的数据 df = pd.DataFrame({ 'Date': ['4/2/2018', '4/2/2018', '4/2/2018', '4/2/2018', '4/2/2018', '5/2/2018', '5/2/2018', '5/2/2018', '6/2/2018', '6/2/2018', '6/2/2018', '6/2/2018'], 'Market': ['Indonesia', 'Australia', 'India', 'USA', 'Germany', 'India', 'Japan', 'Russia', 'Austria', 'Swiss', 'USA', 'Indonesia'], 'Quantity': [1000, 500, 300, 500, 200, 400, 400, 457, 260, 700, 1200, 400] }) # 核心处理:将与上一行重复的日期替换为空字符串 df['Date'] = df['Date'].where(df['Date'] != df['Date'].shift(), '') # 打印输出结果(无索引) print(df.to_string(index=False))
运行这段代码后,输出的格式完全匹配你给出的示例。
二、基于处理后的逻辑绘制柱状图
当然可以绘制你提到的分组柱状图!不过要注意:绘图时我们需要原始的完整数据(不要用处理后日期为空的版本,因为图表需要明确的分组关联),下面给出两种实现方式:
1. Excel 绘制分组柱状图步骤
- 选中原始完整数据区域(A1:C12)
- 点击「插入」选项卡,选择「簇状柱形图」(也就是你说的分组柱状图)
- 可以自定义图表样式:比如将X轴设置为市场名称,图例设置为日期,调整柱子颜色、添加数据标签等,最终就能得到类似示例图的对比效果
2. Python Matplotlib + Seaborn 绘制代码
用代码可以更灵活地定制图表:
import matplotlib.pyplot as plt import seaborn as sns # 使用原始完整数据进行绘图 plt.figure(figsize=(12, 6)) # 绘制分组柱状图,按日期区分不同市场的销量 sns.barplot(data=df, x='Market', y='Quantity', hue='Date') # 自定义图表样式 plt.title('Market Sales Quantity by Date', fontsize=14) plt.xlabel('Market', fontsize=12) plt.ylabel('Quantity', fontsize=12) plt.xticks(rotation=45, ha='right') # 旋转X轴标签避免重叠 plt.tight_layout() # 自动调整布局 plt.show()
这段代码会生成一个清晰的分组柱状图,每个市场对应不同日期的销量柱子,完美展示各日期下的市场销量对比,和你想要的示例图效果一致。
内容的提问来源于stack exchange,提问作者Gaurav Chaudhari
相关产品推荐
相关产品推荐

