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