![](/img/trans.png)
[英]How to reshape Pandas MultiIndex Dataframe (transpose the row for each Category, and have these next to each other as columns and keep index same)
[英]Pandas reshape dataframe where each row is cell value and index
如何获取普通数据框,如下所示:
pd.DataFrame(columns=['X', 'Y'],index=['A','B'])
X Y
A 1 2
B 3 4
并生成一个新的数据框,其中每一行由单元格、列名和索引组成,如下所示:
col1 col2 col3
row0 1 X A
row1 2 Y A
row2 3 X B
row3 4 Y B
任何帮助表示赞赏。
使用DataFrame.stack
的重塑,然后DataFrame.rename_axis
对新列的名称, DataFrame.reset_index
为MultiIndex Series
,以DataFrame
,如果需要重命名索引和列的变化顺序DataFrame.reindex
:
df = (df.stack()
.rename_axis(('col3','col2'))
.reset_index(name='col1')
.rename(lambda x: f'row{x}')
.reindex(['col1','col2','col3'], axis=1))
print (df)
col1 col2 col3
row0 1 X A
row1 2 Y A
row2 3 X B
row3 4 Y B
Numpy/pandas 解决方案 - numpy.ravel
、 numpy.tile
、 numpy.repeat
与DataFrame
构造函数:
df = pd.DataFrame({'col1': df.to_numpy().ravel(),
'col2': np.tile(df.columns,len(df.index)),
'col3': np.repeat(df.index,len(df.columns))}).rename(lambda x: f'row{x}')
print (df)
col1 col2 col3
row0 1 X A
row1 2 Y A
row2 3 X B
row3 4 Y B
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.