我有几个小数据框,例如:
name x y z
A 1 2 3
A 1 23 4
A 3 5 6
B 0 2 3
我想附加所有的“ A”,以便得到此数据框
name x y z x2 y2 z2 x3 y3 z3
A 1 2 3 1 23 4 3 5 6
B 0 2 3 NaN-------------------> NaN
任何帮助将不胜感激,如果上面的表没有正确地隔开
答案 0 :(得分:2)
更像是pivot
创建密钥后的cumcount
问题---我在这里使用unstack
df['Newkey']=df.groupby('name').cumcount()+1
yourdf=df.set_index(['name','Newkey']).unstack().sort_index(level=1,axis=1)
yourdf.columns=yourdf.columns.map('{0[0]}{0[1]}'.format)
yourdf
Out[20]:
x1 y1 z1 x2 y2 z2 x3 y3 z3
name
A 1.0 2.0 3.0 1.0 23.0 4.0 3.0 5.0 6.0
B 0.0 2.0 3.0 NaN NaN NaN NaN NaN NaN
答案 1 :(得分:2)
将pivot_table
与其他一些功能一起使用:
df['idx'] = df.groupby('name').cumcount()+1
df = df.pivot_table(index='name', columns='idx', values=['x', 'y', 'z'], aggfunc='first')
df = df.sort_index(axis=1, level=1)
df.columns = [f'{x}_{y}' for x,y in df.columns]
df = df.reset_index()
现在:
print(df)
复制:
name x_1 y_1 z_1 x_2 y_2 z_2 x_3 y_3 z_3
0 A 1.0 2.0 3.0 1.0 23.0 4.0 3.0 5.0 6.0
1 B 0.0 2.0 3.0 NaN NaN NaN NaN NaN NaN