我有一个 pandas 数据框,我想添加列级别以根据另一个列的值将特定列( metric_a
、 metric_b
、 metric_c
)拆分为多个子列列( parameter
)。
当前数据格式:
participant param metric_a metric_b metric_c
0 alice a 0,700 0,912 0,341
1 alice b 0,736 0,230 0,370
2 bob a 0,886 0,364 0,995
3 bob b 0,510 0,704 0,990
4 charlie a 0,173 0,462 0,709
5 charlie b 0,085 0,950 0,807
6 david a 0,676 0,653 0,189
7 david b 0,823 0,524 0,430
想要的数据格式:
participant metric_a metric_b metric_c
a b a b a b
0 alice 0,700 0,736 0,912 0,230 0,341 0,370
1 bob 0,886 0,510 0,364 0,704 0,995 0,990
2 charlie 0,173 0,085 0,462 0,950 0,709 0,807
3 david 0,676 0,823 0,653 0,524 0,189 0,430
<小时 />
我已经尝试过
df.set_index(['participant', 'param']).unstack(['param'])
这给了我一个接近的结果,但并不令我满意,因为我想保留单级索引和 participant
常规专栏。
metric_a metric_b metric_c
param a b a b a b
participant
alice 0,700 0,736 0,912 0,230 0,341 0,370
bob 0,886 0,510 0,364 0,704 0,995 0,990
charlie 0,173 0,085 0,462 0,950 0,709 0,807
david 0,676 0,823 0,653 0,524 0,189 0,430
<小时 />
我的直觉是groupby()
或pivot_table()
函数可以完成这项工作,但不知道如何完成。
请您参考如下方法:
IIUC,使用DataFrame.set_index
和 unstack
,和reset_index
指定 col_level
参数:
df.set_index(['participant', 'param']).unstack('param').reset_index(col_level=0)
[输出]
participant metric_a metric_b metric_c
param a b a b a b
0 alice 0,700 0,736 0,912 0,230 0,341 0,370
1 bob 0,886 0,510 0,364 0,704 0,995 0,990
2 charlie 0,173 0,085 0,462 0,950 0,709 0,807
3 david 0,676 NaN 0,653 NaN 0,189 NaN
4 heidi NaN 0,823 NaN 0,524 NaN 0,430