首页 > 解决方案 > 具有多个索引的 Pandas 数据框重塑

问题描述

努力了解 Pandas 中的重塑函数。到目前为止,我可以对具有简单结构的数据框进行重塑,例如

d = {'id1': [1,1,1,2,2,2], 'id2': [1,1,1,1,1,1], 'value': [1,2,3,4,5,6], 'type':['A','B','C','A','B','C']}
tab = pd.DataFrame(data=d)      
tab.pivot(index = 'id1', columns = "type", values = "value") 

但是,在看起来更像这样的情况下,我在理解多索引模式时遇到了一些挑战。从概念上讲,在这种情况下我想要返回的是一个具有 3 行的新 df。索引都是id1and id2,因此第 1 行将是 and 的唯一组合的值,然后第 2 行将是id1=1and并且最后一行 3 将是and 。id2=1id1=1id2=2id1=2id2=1

d = {'id1': [1,1,1,1,1,1,2,2,2], 'id2': [1,1,1,2,2,2,1,1,1], 'value': [1,2,3,4,5,6,7,8,9], 'type':['A','B','C','A','B','C','A','B','C']}
tab = pd.DataFrame(data=d)      
tab.pivot(index = 'id1', columns = "type", values = "value")

标签: pythonpandas

解决方案


似乎更简单的选择是pivot_table在 pandas 中使用函数:

d = {'id1': [1,1,1,1,1,1,2,2,2], 'id2': [1,1,1,2,2,2,1,1,1], 'value': [1,2,3,4,5,6,7,8,9], 'type':['A','B','C','A','B','C','A','B','C']}
tab4 = pd.DataFrame(data=d)
tab4.pivot_table(
        values='value', 
        index=['id1', 'id2'], 
        columns='type')

产生以下内容,我相信这就是您所追求的:

type     A  B  C
id1 id2         
1   1    1  2  3
    2    4  5  6
2   1    7  8  9

这是通过这个问题较早的帖子发现的。

注意:这是我对 SO 的第一个回答,所以如果我应该做些不同的事情,请告诉我!


推荐阅读