如何用另一DataFrame列值转换列并为DataFrame添加主类别列
Pandas:基于外部DataFrame转换列值与添加分类列解决方案
我来帮你搞定这两个Pandas操作问题,下面分情况详细说明:
1. 使用另一个DataFrame的列值转换目标DataFrame的列值
核心思路是先从映射DataFrame中提取键值对映射关系,再用Pandas的map()方法或者merge()来完成转换。举个具体例子:
假设我们有一个用来做映射的DataFrame category_map,它存储了子类别和主类别的对应关系:
import pandas as pd # 映射用的DataFrame category_map = pd.DataFrame({ "sub_cat": ["Movie", "Science", "Maths", "Music", "Songs", "Dance", "English"], "main_category": ["Entertainment", "Education", "Education", "Entertainment", "Entertainment", "Entertainment", "Education"] })
如果要把目标DataFrame(比如你的orig_df)的sub_cat列转换成对应的main_category,可以先把category_map转成字典,再用map():
# 构建子类别到主类别的映射字典 cat_dict = category_map.set_index("sub_cat")["main_category"].to_dict() # 转换目标列 orig_df["main_category"] = orig_df["sub_cat"].map(cat_dict)
如果担心有不存在的子类别导致NaN,还可以用fillna()补充默认值:
orig_df["main_category"] = orig_df["sub_cat"].map(cat_dict).fillna("Other")
2. 为orig_df添加“main_category”列(完整代码示例)
结合你的需求,这里给出完整的可运行代码,我顺便修正了orig_df里的拼写错误(把Sud8改成了Stud8):
import pandas as pd # 原始DataFrame orig_df = pd.DataFrame({ "sub_cat": ["Movie", "Science", "Maths", "Music", "Songs", "Dance", "English", "Maths", "Songs"], "Student": ["Stud1", "Stud2", "Stud3", "Stud4", "Stud5", "Stud6", "Stud7", "Stud8", "Stud9"] }) # 定义子类别与主类别的映射关系(也可以用DataFrame来存储,方便后续扩展) category_mapping = { "Movie": "Entertainment", "Science": "Education", "Maths": "Education", "Music": "Entertainment", "Songs": "Entertainment", "Dance": "Entertainment", "English": "Education" } # 添加main_category列 orig_df["main_category"] = orig_df["sub_cat"].map(category_mapping) # 查看结果 print(orig_df)
运行后你会得到带有main_category列的DataFrame,每个子类别都对应到了正确的主类别。
如果你的映射关系是存储在另一个DataFrame里(而不是字典),就用我第一部分提到的方法,先把映射DataFrame转成字典再用map(),或者直接用merge()来关联两个DataFrame:
# 用merge的方式实现 category_map_df = pd.DataFrame(category_mapping.items(), columns=["sub_cat", "main_category"]) orig_df = orig_df.merge(category_map_df, on="sub_cat", how="left")
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

