一种优雅的方式,可以更快地转换大熊猫中的转置

时间:2016-12-08 14:33:44

标签: python pandas dataframe data-science

我有pandas.Dataframe名为a,结构如下: the structure of <code>a</code>

虽然我想让DataFrame结构如下:

the structure of <code>b</code>

其中b就像a的转置。 通过将a转换为b,我使用代码:

id_uni = a['id'].unique()
b = pd.DataFrame(columns=['id']+[str(i) for i in range(1,4)])
b['id'] = id_uni

for i in id_uni:
    for j in range(7):
        ind = (a['id'] == i) & (a['w'] == j)
        med = a.loc[ind, 't'].values 
        if med:  
            b.loc[b['id'] == i, str(j)] = med[0]
        else:
            b.loc[b['id'] == i, str(j)] = 0

该方法非常残酷,我只使用两个for循环来获取ab的所有元素。它很慢。你有一个有效的方法来改善它吗?

1 个答案:

答案 0 :(得分:2)

您可以使用pivot

print (df.pivot(index='id', columns='w', values='t'))
w    1    2   3
id             
0   54  147  12
1    1    0   1
df1 = df.pivot(index='id', columns='w', values='t').reset_index()
df1.columns.name=None
print (df1)
   id   1    2   3
0   0  54  147  12
1   1   1    0   1