我有一个包含两列的数据框:id1
和id2
。
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-1
和id2-2
中的值进行排序(请参阅与id1 == 'B'
对应的行)。 最佳答案
计划
我们想要创建一个索引,使每个连续的时间我们都能看到'id1'
中的值。为此,我们将groupby('id1')
然后使用cumcount()
给我们该新索引。
然后,将索引设置为带有pd.MultiIndex
的set_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/