我有一个这样的数据框:
df1
sample x data data y
b a
d c
f e
h g
j i
l k
我需要像这样创建一个新的数据框:
information identifier
b x
d x
f x
h x
j x
l x
a y
c y
e y
g y
i y
k y
这可以在 pandas 中完成吗?这就像将一列堆叠在另一列之上,但记录该列的信息类型。非常感谢。
最佳答案
使用str.split
按列名,然后按 DataFrame.unstack
reshape , 最后一些数据清理 DataFrame.reset_index
:
#first data solution
df.columns = df.columns.str.split('_', expand=True)
df = (df.unstack()
.reset_index(level=[1,2], drop=True)
.rename_axis('identifier')
.reset_index(name='data')[['data','identifier']])
print (df)
data identifier
0 b x
1 d x
2 f x
3 h x
4 j x
5 l x
6 a y
7 c y
8 e y
9 g y
10 i y
11 k y
编辑:
如果使用 melt
然后列名创建新列:
df = df.melt(var_name='identifier', value_name='information')
print (df)
identifier information
0 sample x data b
1 sample x data d
2 sample x data f
3 sample x data h
4 sample x data j
5 sample x data l
6 data y a
7 data y c
8 data y e
9 data y g
10 data y i
11 data y k
因此您可以提取值 x
和 y
:
df.columns = df.columns.str.extract('(x|y)', expand=False)
df = df.melt(var_name='identifier', value_name='information')
print (df)
identifier information
0 x b
1 x d
2 x f
3 x h
4 x j
5 x l
6 y a
7 y c
8 y e
9 y g
10 y i
11 y k
关于python - 如何合并 pandas 数据框中的两列,堆叠在顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59320246/