如何在Python DataFrame中基于种族与性别创建Gen_Eth新列?
实现Gen_Eth列编码的几种方法
以下是针对你的人口统计数据集,生成Gen_Eth编码列的三种实用方法,均基于Python pandas库(处理大型数据集的常用工具):
方法1:嵌套if-else条件判断
适合刚接触数据处理、需要清晰理解逻辑的场景,通过自定义函数结合apply实现:
import pandas as pd # 自定义编码函数 def get_gen_eth(row): if row['Ethnicity'] == 'African American': return 0 if row['Gender'] == 'M' else 1 elif row['Ethnicity'] == 'White': return 2 if row['Gender'] == 'M' else 3 elif row['Ethnicity'] == 'Latino': return 4 if row['Gender'] == 'M' else 5 elif row['Ethnicity'] == 'Asian': return 6 if row['Gender'] == 'M' else 7 # 假设你的数据集是df,生成新列 df['Gen_Eth'] = df.apply(get_gen_eth, axis=1)
注:apply逐行处理数据,大型数据集下效率略低,更推荐后两种方法。
方法2:构建映射字典(高效简洁)
提前定义所有Ethnicity+Gender组合与编码的映射关系,利用map实现批量转换,适合大型数据集:
# 构建映射字典 gen_eth_map = { ('African American', 'M'): 0, ('African American', 'F'): 1, ('White', 'M'): 2, ('White', 'F'): 3, ('Latino', 'M'): 4, ('Latino', 'F'): 5, ('Asian', 'M'): 6, ('Asian', 'F'): 7 } # 将Ethnicity和Gender合并为元组后映射编码 df['Gen_Eth'] = list(map(gen_eth_map.get, zip(df['Ethnicity'], df['Gender'])))
这种方法避免了条件判断,字典查找的时间复杂度更低,处理大数据集速度更快。
方法3:数值编码结合计算(最优效率)
通过给Ethnicity分配基础编码,再结合Gender的二进制编码,用数学计算直接得到结果,完全适配pandas向量化特性,性能最优:
# 给Ethnicity分配基础编码(对应男性的初始值) ethnicity_base = { 'African American': 0, 'White': 2, 'Latino': 4, 'Asian': 6 } # Gender转数值:M=0,F=1 gender_code = df['Gender'].map({'M':0, 'F':1}) # 基础编码 + Gender编码 = 最终Gen_Eth df['Gen_Eth'] = df['Ethnicity'].map(ethnicity_base) + gender_code
这种方法无需逐行处理,百万级以上数据集下优势尤为明显。
内容的提问来源于stack exchange,提问作者Johnn-1231
相关产品推荐
相关产品推荐

