我经常想线性化一个数据框。 例如,
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()
我想知道熊猫中是否有内置模块可以做到这一点。
答案 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'])