Pandas重塑数据帧,其中每一行都是单元格值和索引



如何获取正常的数据帧,如下所示:

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 SeriesDataFrame,如有必要,通过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/pands解决方案-numpy.ravelnumpy.tilenumpy.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

相关内容

最新更新