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

如何在Pandas中将DataFrame单列值转换为多列值

Pandas DataFrame 结构转换实现方法

原始数据结构

iddatedecision
12022-11-10improve
12022-11-10checked
22021-09-12checked
32020-08-22checked
42019-11-10complete
42019-11-10revise

目标数据结构

iddateCRPrincipal
12022-11-10checkedimprove
22021-09-12checkedNA
32020-08-22checkedNA
42019-11-10revisecomplete

实现方法一:分组自定义转换

核心逻辑是按id和date分组,根据每组内的decision集合判断目标列取值:

  • CR优先取revise,无revise则取checked
  • Principal取improve或complete,无对应值则设为NA
import pandas as pd

# 构造原始DataFrame(已有数据可跳过此步)
df = pd.DataFrame({
    'id': [1,1,2,3,4,4],
    'date': ['2022-11-10','2022-11-10','2021-09-12','2020-08-22','2019-11-10','2019-11-10'],
    'decision': ['improve','checked','checked','checked','complete','revise']
})

def process_group(group):
    decisions = set(group['decision'])
    cr_val = 'revise' if 'revise' in decisions else 'checked'
    principal_val = next((d for d in ['improve', 'complete'] if d in decisions), pd.NA)
    return pd.Series({'CR': cr_val, 'Principal': principal_val})

# 分组处理并重置索引
result_df = df.groupby(['id', 'date']).apply(process_group).reset_index()
print(result_df)

实现方法二:透视表映射转换

先给每个decision标记对应的目标列,再通过透视表重组结构,最后调整冲突取值:

import pandas as pd

df = pd.DataFrame({
    'id': [1,1,2,3,4,4],
    'date': ['2022-11-10','2022-11-10','2021-09-12','2020-08-22','2019-11-10','2019-11-10'],
    'decision': ['improve','checked','checked','checked','complete','revise']
})

# 标记每个decision对应的目标列
df['target_col'] = df['decision'].map({
    'checked': 'CR',
    'revise': 'CR',
    'improve': 'Principal',
    'complete': 'Principal'
})

# 透视表重组结构
result_df = df.pivot(index=['id', 'date'], columns='target_col', values='decision').reset_index()

# 处理CR列:同时存在checked和revise时保留revise
result_df['CR'] = result_df['CR'].apply(lambda x: 'revise' if isinstance(x, str) and 'revise' in x else x)

# 填充缺失值为NA
result_df = result_df.fillna(pd.NA)

print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:15:56