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

如何将单物种列的DataFrame转换为多列独热编码格式?

实现DataFrame物种列的独热编码转换

针对你需要将包含ID、经纬度和物种的DataFrame转换为「每个物种作为单独列,对应行属于该物种时标记1,否则标记0」的需求,这里提供两种高效的处理方法,尤其适合40余种物种的场景:

方法一:使用pandas.get_dummies()(推荐)

get_dummies是Pandas专门用于生成独热编码的工具,能自动识别所有物种类别并生成对应列,无需手动指定,处理大量分类时效率极高。

代码示例

import pandas as pd

# 构造示例数据(实际使用时替换为你的DataFrame)
data = {
    'ID': [1,2,3,4,5,6,7],
    'lon': [8.94697, 8.94393, 8.94526, 8.94355, 8.94142, 8.94119, 8.94406],
    'lat': [48.1015, 48.1007, 48.1031, 48.0977, 48.0985, 48.0980, 48.0954],
    'species': ['sp1','sp1','sp2','sp2','sp1','sp3','sp4']
}
df = pd.DataFrame(data)

# 对species列生成独热编码,去掉前缀避免列名冗余
species_dummies = pd.get_dummies(df['species'], prefix='', prefix_sep='')

# 合并原数据的ID、lon、lat列与编码后的物种列
result_df = pd.concat([df[['ID', 'lon', 'lat']], species_dummies], axis=1)

print(result_df)

说明

  • 该方法会自动遍历所有物种类别,生成对应列,即使新增物种也无需修改代码
  • prefix=''和prefix_sep=''用于让生成的列名直接为物种名称(如sp1),完全匹配你的格式需求

方法二:使用pandas.pivot_table()

通过透视表的方式也可以实现需求,适合需要自定义聚合逻辑的场景:

代码示例

import pandas as pd

# 构造示例数据
data = {
    'ID': [1,2,3,4,5,6,7],
    'lon': [8.94697, 8.94393, 8.94526, 8.94355, 8.94142, 8.94119, 8.94406],
    'lat': [48.1015, 48.1007, 48.1031, 48.0977, 48.0985, 48.0980, 48.0954],
    'species': ['sp1','sp1','sp2','sp2','sp1','sp3','sp4']
}
df = pd.DataFrame(data)

# 生成透视表,空值填充为0
result_pivot = df.pivot_table(
    index=['ID', 'lon', 'lat'],
    columns='species',
    aggfunc=lambda x: 1,  # 存在该物种则标记为1
    fill_value=0
).reset_index()

# 调整列名结构,去掉多余层级
result_pivot.columns = result_pivot.columns.droplevel(0)
result_pivot.rename(columns={'': 'ID', '': 'lon', '': 'lat'}, inplace=True)

print(result_pivot)

说明

  • 透视表通过分组索引(ID、lon、lat)和列(species)构建表格,聚合函数确保存在物种的行标记为1
  • 需要额外调整列名结构,相比get_dummies步骤稍多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:34:53