熊猫通过根据另一列的值添加列级别来重塑数据框[重复]
Posted
技术标签:
【中文标题】熊猫通过根据另一列的值添加列级别来重塑数据框[重复]【英文标题】:Pandas reshape dataframe by adding a column level based on the value of another column [duplicate] 【发布时间】:2019-09-14 21:35:55 【问题描述】:我有一个 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()
函数可以完成这项工作,但不知道如何。
【问题讨论】:
【参考方案1】: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
【讨论】:
感谢您的快速回答。这样做我无法再访问participant
列:>>> df['participant']
[out] KeyError: 'participant'
我宁愿拥有这种数据结构:***.com/questions/24290297/…(问题中的grouped
)
@Étienne 道歉,改成 col_level=0
和 df['participant']
应该可以工作以上是关于熊猫通过根据另一列的值添加列级别来重塑数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章