【问题标题】:I want to append the rows of a dataframe as columns我想将数据框的行附加为列
【发布时间】:2019-08-15 06:31:53
【问题描述】:
我有几个小的数据框,例如:
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
任何帮助将不胜感激,如果上述表格的间距不正确,我们深表歉意
【问题讨论】:
标签:
python
pandas
dataframe
rows
col
【解决方案1】:
在cumcount创建密钥后更像pivot问题---我在这里使用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
【解决方案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