繁体   English   中英

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

[英]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_indexMultiIndex 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.ravelnumpy.tilenumpy.repeatDataFrame构造函数:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM