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

无法向新DataFrame列添加已有数据?附箱线图实现需求

问题解决:性别薪资数据提取与并列箱线图实现

一、薪资列赋值NaN问题的解决

你的代码中Female Salaries列始终为NaN的核心原因是索引不匹配:

  • 筛选出的df_male和df_female保留了原数据集的索引,将df_male["Salary"]赋值给df2后,df2的索引是df_male的原索引(如3、7、10等);而df_female的索引是另一组值(如0、1、2等),两者无重叠,因此赋值后对应位置全为NaN。
  • 另外你筛选男性时的条件df.Gender == "M "多了一个空格,从数据集预览看,Gender列的男性值是"M"而非"M ",这会导致筛选结果不准确。

修正后的代码

# 导入库
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据
df = pd.read_csv("TMA_Data.csv")

# 修正筛选条件,去掉多余空格,并重置索引(drop=True避免保留原索引列)
df_female = df[df["Gender"] == "F"].reset_index(drop=True)
df_male = df[df["Gender"] == "M"].reset_index(drop=True)

# 创建新DataFrame并赋值
df2 = pd.DataFrame({
    "Male Salaries": df_male["Salary"],
    "Female Salaries": df_female["Salary"]
})

# 查看结果
print(df2.head())

或者更简单的方式,直接提取薪资数组赋值,忽略索引:

df2 = pd.DataFrame()
df2["Male Salaries"] = df[df["Gender"] == "M"]["Salary"].values
df2["Female Salaries"] = df[df["Gender"] == "F"]["Salary"].values

这样就能保证两列索引对齐,不会出现NaN。

二、并列箱线图的更优实现方案

无需单独创建新DataFrame,直接通过原数据分组即可快速绘制并列箱线图,以下是两种常用方式:

方式1:使用Pandas内置的boxplot方法

Pandas的DataFrame可直接按Gender分组绘制箱线图,代码更简洁:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("TMA_Data.csv")

# 按Gender分组绘制薪资箱线图
df.boxplot(column="Salary", by="Gender", patch_artist=True)
plt.title("性别薪资差距箱线图")
plt.suptitle("")  # 去掉默认自动生成的标题
plt.xlabel("性别")
plt.ylabel("薪资")
plt.show()

方式2:使用Matplotlib手动绘制并列箱线图

如果需要自定义样式,可以手动提取两组薪资数据传入matplotlib:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv("TMA_Data.csv")

# 提取男女薪资数据
male_salaries = df[df["Gender"] == "M"]["Salary"].values
female_salaries = df[df["Gender"] == "F"]["Salary"].values

# 绘制并列箱线图
fig, ax = plt.subplots()
box = ax.boxplot([male_salaries, female_salaries], patch_artist=True)

# 设置样式和标签
ax.set_xticklabels(["男性", "女性"])
ax.set_xlabel("性别")
ax.set_ylabel("薪资")
ax.set_title("性别薪资差距箱线图")

# 给箱线图填充颜色
colors = ["#1f77b4", "#ff7f0e"]
for patch, color in zip(box['boxes'], colors):
    patch.set_facecolor(color)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:06:13