如何对DataFrame提取前缀、分组统计数量并实现可视化?
问题描述
现有一个名为data_frame的大型DataFrame,包含PRE和STATUS两列,数据示例如下:
PRE STATUS 1_752566 GAINED 1_776546 LOST 1_832918 NA 1_842013 LOST 1_846864 GAINED 11_8122943 NA 11_8188699 GAINED 11_8321128 NA 23_95137734 NA 23_95146814 GAINED
需完成以下操作:
- 新增
CHR列,提取PRE列每个值下划线前的数字并与原数据对应 - 按
CHR列的数字分组,统计每组的行数,生成包含NUM和SUM的新数据表 - 绘制可视化图表,以
NUM为X轴、SUM为Y轴展示每组的统计结果
解决方案
1. 新增CHR列
利用pandas的字符串拆分方法提取下划线前的部分,转为整数类型:
import pandas as pd # 提取CHR列 data_frame['CHR'] = data_frame['PRE'].str.split('_').str[0].astype(int)
处理后的数据示例:
PRE STATUS CHR 1_752566 GAINED 1 1_776546 LOST 1 1_832918 NA 1 1_842013 LOST 1 1_846864 GAINED 1 11_8122943 NA 11 11_8188699 GAINED 11 11_8321128 NA 11 23_95137734 NA 23 23_95146814 GAINED 23
2. 分组统计行数
按CHR分组后统计每组行数,并重命名列名以匹配需求:
# 分组统计行数 summary_df = data_frame.groupby('CHR').size().reset_index(name='SUM') summary_df = summary_df.rename(columns={'CHR': 'NUM'})
生成的统计数据表:
NUM SUM 1 5 11 3 23 2
3. 绘制可视化图表
使用matplotlib或seaborn绘制柱状图展示统计结果:
方法1:matplotlib基础柱状图
import matplotlib.pyplot as plt plt.figure(figsize=(8, 5)) plt.bar(summary_df['NUM'].astype(str), summary_df['SUM'], color='#1f77b4') plt.xlabel('NUM') plt.ylabel('SUM') plt.title('每组数据行数统计') plt.tight_layout() plt.show()
方法2:seaborn美化版柱状图
import seaborn as sns plt.figure(figsize=(8, 5)) sns.barplot(x='NUM', y='SUM', data=summary_df, palette='viridis') plt.xlabel('NUM') plt.ylabel('SUM') plt.title('每组数据行数统计') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者user11924976
相关产品推荐
相关产品推荐

