我有一个包含两列的数据框:id1id2

df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [12,13,12,11,13,13]})
print(df)

id1     id2
A       123
B       13
C       12
B       11
A       13
C       132


我想重塑它的形状(使用,groupby还是pivot?)以获得以下内容:

id1      id2-1    id2-2
A        123       13
B        13        11
C        12        132


请注意,每个id1正好有两行,但是id2的值却很多(因此,我宁愿不做一键式矢量编码)。

如果可以按字典顺序对输出进行排序,则有一个优先选择:

id1      id2-1    id2-2
A        13       123
B        11       13
C        12       132


即对于每行id2-1id2-2中的值进行排序(请参阅与id1 == 'B'对应的行)。

最佳答案

计划


我们想要创建一个索引,使每个连续的时间我们都能看到'id1'中的值。为此,我们将groupby('id1')然后使用cumcount()给我们该新索引。
然后,将索引设置为带有pd.MultiIndexset_index
使用pd.MultiIndex设置为unstack
最后,我们使用一些棘手的映射来重命名列




d = df.set_index(['id1', df.groupby('id1').cumcount() + 1]).unstack()
d.columns = d.columns.to_series().map('{0[0]}-{0[1]}'.format)

print(d)

     id2-1  id2-2
id1
A       12     13
B       13     11
C       12     13

关于python - python pandas重塑数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43355147/

10-12 21:42