Python Pandas函数将数据帧线性化

Python Pandas函数将数据帧线性化,python,pandas,dataframe,Python,Pandas,Dataframe,我经常想线性化一个数据帧。 比如说, a b 1 l m 2 n o 到 我使用这个自定义代码来线性化数据帧 import pandas as pd def unstack2df(df,coln='columns',idxn='index',col='value'): if df.columns.name is None: df.columns.name=coln if df.index.name is None: df.index.nam

我经常想线性化一个数据帧。 比如说,

  a b 
1 l m
2 n o

我使用这个自定义代码来线性化数据帧

import pandas as pd
def unstack2df(df,coln='columns',idxn='index',col='value'):
    if df.columns.name is None:
        df.columns.name=coln
    if df.index.name is None:
        df.index.name=idxn
    df=df.unstack()
    df.name=col
    return pd.DataFrame(df).reset_index()
我想知道pandas中是否有内置模块可以做到这一点。

IIUC:

df.unstack().rename_axis(['columns', 'index']).reset_index(name = 'value')
输出:

  columns  index value
0       a      1     l
1       a      2     n
2       b      1     m
3       b      2     o
您可以在将索引提升到系列后使用。然后,如果需要,可以对列/行进行排序和重命名

res = pd.melt(df.assign(index=df.index), id_vars=['index'])

print(res)

   index variable value
0      1        a     l
1      2        a     n
2      1        b     m
3      2        b     o
更详细但等效的版本:

df = df.reset_index()    
res = pd.melt(df, id_vars=['index'])
df = df.reset_index()    
res = pd.melt(df, id_vars=['index'])