Python DataFrame多值Name列拆分及统计可视化问题求助
解决DataFrame多值列拆分、统计及可视化问题
1. 拆分Name列并保留原DataFrame
你已经用str.split(expand=True)完成了拆分,只需将拆分结果与原DataFrame合并即可,用pd.concat实现:
import pandas as pd data = {'Name': ['Bird,Elephant,Dog,Cat', 'Bird,Elephant,Dog', 'Bird,Elephant,none,Cat', 'Bird'],'Age': [20, 21, 19, 18]} df = pd.DataFrame(data) # 拆分Name列生成新列 split_names = df['Name'].str.split(',', expand=True) # 给拆分后的列命名 split_names.columns = [f'Name_{i}' for i in split_names.columns] # 合并回原DataFrame,保留原Name列 df_with_split = pd.concat([df, split_names], axis=1) print(df_with_split)
执行后得到的df_with_split会保留原Name列,同时新增拆分后的各值列。
2. 统计各名称的出现次数
要统计所有名称的出现次数,需将拆分后的名称列转为一维数据,过滤空值和不需要的none,再用value_counts()统计:
# 提取所有拆分后的名称列,转为一维Series all_names = df_with_split.filter(regex='Name_\d').stack() # 过滤空值和'none' cleaned_names = all_names[all_names != 'none'].dropna() # 统计各名称出现次数 name_counts = cleaned_names.value_counts() print(name_counts)
运行结果示例:
Bird 4 Elephant 3 Cat 2 Dog 2 dtype: int64
3. 用countplot可视化统计结果
使用seaborn的countplot绘制可视化图表,需先将统计结果转为DataFrame:
import seaborn as sns import matplotlib.pyplot as plt # 将统计结果转为DataFrame count_df = name_counts.reset_index() count_df.columns = ['Name', 'Count'] # 绘制countplot sns.countplot(data=count_df, x='Name', hue='Name', palette='viridis', legend=False) # 为每个柱子添加数值标签 for i, v in enumerate(count_df['Count']): plt.text(i, v, str(v), ha='center') plt.title('各名称出现次数统计') plt.xlabel('名称') plt.ylabel('出现次数') plt.show()
通过图表可以直观看到最受欢迎的名称。
内容的提问来源于stack exchange,提问作者Amelia Putri Damayanti
相关产品推荐
相关产品推荐

