我有一个这样的数据框:
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
可以在熊猫里做吗?这就像将一列堆叠在另一列之上,但保留该列是什么类型的信息的记录。非常感谢。
最佳答案
通过列名称使用str.split
,然后通过DataFrame.unstack
进行整形,最后通过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/