#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
按列名使用^{} ,然后按^{} 重塑,最后按^{} 清理数据:
编辑:
如果使用
melt
,则列名称将创建新列:因此可以提取值
x
和y
:我认为这种方法非常直观:
1)拆分列并创建一个新的dataframe,其中x\u data和'x'的值作为另一列的标识符(与'y\u data'相同)
考虑一下这段代码:
我们在这里要做的是制作两个列表:第一个是x\u数据值的列表;第二个是x\u数据中每个元素重复x的列表 使用zip,我们将它们转换为一个列表,并使用pd.数据帧([列表,列])生成数据帧dx
2)连接数据帧以交付具有预期格式的单个数据帧
相关问题 更多 >
编程相关推荐