【发布时间】:2026-02-21 03:10:01
【问题描述】:
我正在将数据框从长格式转换为宽格式,但是我面临的问题是生成正确数量的已翻译列并动态重命名新的数据框列。
假设我有一个示例数据框,如下所示:
data = {'name':['Tom', 'nick', 'Tom', 'nick','Tom'], 'id':[20, 21, 20, 21,22], 'plan' : [100,101,102,101,100], 'drug' : ['a','b','b','c','a']}
df = pd.DataFrame(data)
drug id name plan
a 20 Tom 100
b 21 nick 101
b 20 Tom 102
c 21 nick 101
a 22 Tom 100
因此,对于每个给定的名称和 ID,我想为计划和药物创建多个列。例如,有 3 种不同的计划和 3 种不同的药物,所以理想情况下,我应该得到 6 个新列,指示是否已采取特定计划/药物。
我尝试从长转换为宽,但没有得到想要的结果。 长转宽:
df1 = df.groupby(['name','id'])['plan', 'drug'].apply(lambda x: pd.DataFrame(x.values)).unstack().reset_index()
实际输出:
name id 0 1 0 1
Tom 20 100 102 a b
nick 21 101 101 b c
Tom 22 100 None a None
预期输出:
name age 100 101 102 a b c
Tom 20 1 0 1 1 1 0
Tom 22 1 0 0 1 0 0
nick 21 0 1 0 0 1 1
【问题讨论】: