Python Pandas 数据合并与缺失值填充

本文将使用 Python Pandas 解决一个实际的数据处理问题。问题涉及两个数据表,包含员工信息,例如公司、姓名、年龄、身高、体重和薪资。目标是合并这两个数据表,并根据特定条件筛选数据、填充缺失值,最终生成包含 80 位员工信息的完整表格。

问题描述

给定两张包含员工信息的表格,需要完成以下任务:

(a) 找出同时出现在两张表格中的员工

(b) 筛选出未同时出现在两张表格中的员工,并合并为一张新表格

(c) 对于同时出现在两张表格中的员工,选择其在某个指标上偏离所属公司非共同员工平均值较小的数值,例如:对于 P 公司,如果共同员工 p1 在表格 1 的薪资为 13000 元,在表格 2 的薪资为 9000 元,而 P 公司非共同员工的平均薪资为 10000 元,则 p1 的最终薪资应为 9000 元。最后,使用缺失值填充所有未出现在任何表格中的员工信息。

Python Pandas 实现

import pandas as pd

# 读取两张表的数据
df1 = pd.read_csv("table1.csv")
df2 = pd.read_csv("table2.csv")

# 找出既出现在 df1 又出现在 df2 的员工
common_employees = df1.merge(df2, on=["Company", "Name"], how="inner")

# 找出不符合条件的员工
uncommon_employees = df1.merge(df2, on=["Company", "Name"], how="outer", indicator=True)
uncommon_employees = uncommon_employees[uncommon_employees["_merge"] != "both"]

# 合并两张表,并根据条件选择数值较小的指标
merged = pd.concat([common_employees, uncommon_employees])
merged["Salary"] = merged.apply(lambda x: x["Salary_x"] if x["Salary_x"] < x["Salary_y"] else x["Salary_y"], axis=1)
merged["Age"] = merged.apply(lambda x: x["Age_x"] if x["Age_x"] < x["Age_y"] else x["Age_y"], axis=1)
merged["Height"] = merged.apply(lambda x: x["Height_x"] if x["Height_x"] < x["Height_y"] else x["Height_y"], axis=1)
merged["Weight"] = merged.apply(lambda x: x["Weight_x"] if x["Weight_x"] < x["Weight_y"] else x["Weight_y"], axis=1)

# 填充缺失值
merged.fillna("NaN", inplace=True)

# 输出结果
print(merged)

总结

本文演示了如何使用 Python Pandas 合并两个数据表,并根据特定条件筛选数据、填充缺失值,最终生成包含 80 位员工信息的完整表格。此方法可应用于各种数据处理和分析场景,方便用户高效地整理和分析数据。

Python Pandas 数据合并与缺失值填充

原文地址: https://www.cveoy.top/t/topic/C 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录