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

使用pandas绘制CSV文件各列CDF值的实现问题求助

基于pandas+seaborn绘制指定列CDF的最简实现方案

你原有代码的冗余点在于手动实现了CDF计算逻辑,且分组拼接的处理容易出现坐标轴对齐异常,可直接用以下两种方案实现,效果更稳定:

方案1:使用seaborn内置函数(最简,无需手动计算CDF)

seaborn自带的ecdfplot函数可以直接计算并绘制经验累积分布函数(和你需要的CDF效果完全一致),仅需几行代码即可完成:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 读取CSV文件
df = pd.read_csv('pathfile.csv')
# 指定需要绘制的列,直接绘图
sns.ecdfplot(data=df[['1', '2', '3', '4']])
# 可选:自定义坐标轴标签
plt.xlabel('取值')
plt.ylabel('累积分布概率(CDF)')
plt.show()

方案2:手动计算CDF(适合需要保留CDF数据做后续分析的场景)

如果需要获取CDF的具体数值用于后续处理,可以用以下精简的pandas向量化操作实现,避免循环拼接的冗余逻辑:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('pathfile.csv')
plot_cols = ['1', '2', '3', '4']

# 宽表转长表,方便分组处理
melted_df = df[plot_cols].melt(var_name='字段名', value_name='X')
# 按字段分组排序后计算CDF
melted_df = melted_df.sort_values(['字段名', 'X'])
melted_df['CDF'] = melted_df.groupby('字段名').cumcount() / (melted_df.groupby('字段名')['X'].transform('count') - 1)

# 绘图
sns.lineplot(data=melted_df, x='X', y='CDF', hue='字段名')
plt.show()

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:36:05