我有两个列: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我想重塑它(使用,群,或者枢轴?)获得以下信息:
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'的行)。
发布于 2017-04-11 22:53:48
计划
'id1'中的值。为此,我们将使用groupby('id1'),然后使用cumcount()为我们提供新的索引。pd.MultiIndex的set_indexpd.MultiIndex,我们被设置为unstackd = 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发布于 2017-04-11 20:09:20
这应该可以做到:
import pandas as pd
df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [123,13,12,11,13,132]})
df['id2'] = df['id2'].astype(str)
df = df.groupby(['id1']).agg(lambda x: '-'.join(x))
df['id2-1'] = df['id2'].apply(lambda x: x.split('-')[0]).astype(int)
df['id2-2'] = df['id2'].apply(lambda x: x.split('-')[1]).astype(int)
df = df.reset_index()[['id1', 'id2-1', 'id2-2']]https://stackoverflow.com/questions/43355147
复制相似问题