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

将分类变量Fert的水平计数转换为独立变量的DataFrame处理请求

嘿,这个需求用pandas的pivot_table就能完美解决,甚至还能处理数据里可能存在的重复组合情况,我给你写好代码并解释清楚:

首先先回顾下你的原始数据结构(前10行):

FemID Sperm Week Fert Freq
1: 269 High 1 F 4
2: 269 High 1 I 5
3: 273 High 1 F 6
4: 274 High 1 I 1
5: 275 High 1 I 1
6: 276 High 1 I 1
7: 278 Low 1 I 1
8: 280 Low 1 I 1
9: 281 Low 1 I 1
10: 282 Low 1 I 5

接下来是转换代码:

import pandas as pd

# 假设你的原始DataFrame名为table
transformed_df = table.pivot_table(
    index='FemID',          # 每行对应一个唯一的FemID
    columns='Fert',         # 将Fert的F/I水平转为列
    values='Freq',          # 用Freq的数值填充新列
    aggfunc='sum',          # 若同一FemID+Fert有多个记录,自动求和合并
    fill_value=0            # 缺失的组合直接填充为0
).reset_index()             # 把FemID从索引变回普通列

# 可选:移除列名的层级标签,让输出更整洁
transformed_df.columns.name = None

代码说明:

  • pivot_table是pandas处理长转宽格式的核心工具,比基础的pivot更稳健,能自动处理重复的分组记录
  • fill_value=0帮你省去手动补0的步骤,直接把不存在的FemID+Fert组合填成0
  • reset_index()确保FemID作为普通列存在,而不是索引,符合常规的DataFrame使用习惯

转换后的DataFrame大概长这样:

FemIDFI
26945
27360
27401
27501
.........

如果你的数据里每个FemID和Fert的组合是唯一的(没有重复行),也可以用更简洁的pivot方法:

transformed_df = table.pivot(
    index='FemID',
    columns='Fert',
    values='Freq'
).fillna(0).reset_index()
transformed_df.columns.name = None

不过还是更推荐pivot_table,容错性更强~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:47:00