使用两列的值作为索引/列和第三列的值创建新的Pandas DataFrame

时间:2018-10-02 21:54:32

标签: python pandas dataframe

我有一个DataFrame df,其中有3列。每行具有前两列中值的唯一组合,而第三列只是归因于前两列中唯一组合的数值:

>>> df

   col1  col2  col3
0    a     x     1
1    a     y     5
2    a     z     4
3    b     x     3
4    b     y     2
5    b     z     5
6    c     x     7
7    c     y     9
8    c     z     1

因此,“ a”和“ x”专门表示1,“ c”和“ y”表示9,依此类推。

我要做的是将其转换为新的DataFrame,其中col1col2中唯一值的集合是索引/列名,而col3中的唯一值是这些交叉点处的值。这样完成的DataFrame df2看起来像这样:

>>> df2       
     a     b     c
x    1     3     7
y    5     2     9
z    4     5     1

目前,我有一个使用嵌套的for循环的功能解决方案:

df2 = pd.DataFrame(index=df['col2'].unique(), columns=df['col1'].unique()])
for var1 in df2.columns.values:
    for var2 in df2.index.values:
        df2[var1][var2] = df.loc[df['col1']==var1].loc[df['col2']==var2]['col3'].values[0]

但是,这种解决方案效率很低。是否有另一种更高效,更整齐的方式可以完成相同的任务,而无需手动遍历需要填充的DataFrame的每个插槽?

1 个答案:

答案 0 :(得分:0)

In [8]: df.pivot_table(index="col1", columns="col2")
Out[8]:
     col3
col2    x  y  z
col1
a       1  5  4
b       3  2  5
c       7  9  1
相关问题