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

如何在R中重塑含类别与子类别混合列的DataFrame

解决方案

可以用Pandas的ffill()(向前填充)方法结合简单过滤操作实现转换,具体步骤如下:

1. 构造示例数据

先还原你的原始DataFrame:

import pandas as pd
import numpy as np

data = {
    'category': ['A', 'high', 'mid', 'low', 'B', 'high', 'mid', 'low', 'C', 'low'],
    'value': [np.nan, 20, 18, 10, np.nan, 22, 12, 11, np.nan, 14]
}
df = pd.DataFrame(data)

2. 填充父类别值

新增一列存储父类别,利用ffill()将类别行(value为NA的行)的category值向下填充到后续子类别行:

# 新增父类别列并填充
df['parent_category'] = df.loc[df['value'].isna(), 'category'].ffill()

3. 过滤并调整结构

过滤掉原始的类别行(value为NA的行),再重命名列并调整顺序:

# 过滤掉空值行
result_df = df[~df['value'].isna()].copy()
# 重命名列并调整顺序
result_df.rename(columns={'category': 'subcategory', 'parent_category': 'category'}, inplace=True)
result_df = result_df[['category', 'subcategory', 'value']].reset_index(drop=True)

运行后result_df即为目标结构:

category subcategory  value
0        A        high   20.0
1        A         mid   18.0
2        A         low   10.0
3        B        high   22.0
4        B         mid   12.0
5        B         low   11.0
6        C         low   14.0

补充说明

  • 如果原始数据中value的NA是字符串'NA'而非numpy的NaN,需先转为真正的缺失值:df['value'] = pd.to_numeric(df['value'], errors='coerce')
  • ffill()会自动将最近的非空值向下填充,完美适配类别行在前、子类别行在后的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:06:25