Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-将列拆分为行,同时保留索引_Python_Pandas - Fatal编程技术网

Python Pandas-将列拆分为行,同时保留索引

Python Pandas-将列拆分为行,同时保留索引,python,pandas,Python,Pandas,我有以下简化的数据帧: 将熊猫作为pd导入 数据帧([{'index_a':'a1','index_b':'b1','value_x':'x1','value_y':'y1'}, {'index_a':'a2','index_b':'b2','value_x':'x2','value_y':'y2'}, {'index_a':'a3','index_b':'b3','value_x':'x3','value_y':'y3'}] 它包含两个索引和两个值列。对于下游使用,有两个值列(它们来自同一分

我有以下简化的
数据帧

将熊猫作为pd导入
数据帧([{'index_a':'a1','index_b':'b1','value_x':'x1','value_y':'y1'},
{'index_a':'a2','index_b':'b2','value_x':'x2','value_y':'y2'},
{'index_a':'a3','index_b':'b3','value_x':'x3','value_y':'y3'}]
它包含两个索引和两个值列。对于下游使用,有两个值列(它们来自同一分布)是没有意义的。因此,我想“分解”这些列,并制作一个大列表。这就是结果:

pd.DataFrame([{'index_a':'a1','index_b':'b1','value':'x1'},
{'index_a':'a1','index_b':'b1','value':'x1'},
{'index_a':'a2','index_b':'b2','value':'x2'},
{'index_a':'a2','index_b':'b2','value':'y2'},
{'index_a':'a3','index_b':'b3','value':'x3'},
{'index_a':'a3','index_b':'b3','value':'y3'}])
我尝试通过
.value
.ravel()
来隔离值,但没有一个产生预期的结果

提前谢谢。bbquerycus:)

使用
str.contains()
查找列名以筛选索引列并将其作为
id\u vars
传递:

final=df.melt(df.columns[df.columns.str.contains('index')]).drop('variable',1)


如果您运行下面的代码
将熊猫作为pd导入
df=pd.DataFrame([{'index_a':'a1','index_b':'b1','value_x':'x1','value_y':'y1'},
{'index_a':'a2','index_b':'b2','value_x':'x2','value_y':'y2'},
{'index_a':'a3','index_b':'b3','value_x':'x3','value_y':'y3'}]

结果将是

索引a索引b值x值y
0 a1 b1 x1 y1
1 a2 b2 x2 y2
2 a3 b3 x3 y3


因此,您可以在这里选择列
['index\u a','index\u b','value\u x']


df1=df['index\u a','index\u b','value\u x']


索引a索引b值x
0 a1 b1 x1
1 a2 b2 x2
2 a3 b3 x3


同样地,选择列
['index\u a'、'index\u b'、'value\u y']


df2=df['index\u a','index\u b','value\u y']


索引a索引b值y
0 a1 b1 y1
1 a2 b2 y2
2 a3 b3 y3


将列
value\u x
value\u y
重命名为通用名称
value


df1=df1.rename(列={'value\ux':'value'})
df2=df2.重命名(列={'value_y':'value'})


现在连接数据帧
df1
df2
忽略索引值

df3=pd.concat([df1,df2],ignore_index=True)


索引a索引b值
0 a1 b1 x1
1 a2 b2 x2
2 a3 b3 x3
3 a1 b1 y1
4 a2 b2 y2
5 a3 b3 y3


通过分组列对行进行排序
索引a
索引b


df3.sort_值(['index_a','index_b'])
final=df.melt(df.columns[df.columns.str.contains('index')))。drop('variable',1)
  index_a index_b value
0      a1      b1    x1
1      a2      b2    x2
2      a3      b3    x3
3      a1      b1    y1
4      a2      b2    y2
5      a3      b3    y3