You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:16:05