熊猫函数线性化数据框

时间:2018-06-20 13:34:08

标签: python pandas dataframe

我经常想线性化一个数据框。 例如,

  a b 
1 l m
2 n o

columns index value 
      a     1     l
      b     1     m
      a     2     n    
      b     2     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()

我想知道熊猫中是否有内置模块可以做到这一点。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

将索引提升为系列后,可以使用pandas.melt。然后,您可以根据需要对列/行进行排序和重命名。

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'])