通过查看第一列来堆叠一对列

时间:2016-08-29 13:45:31

标签: python pandas dataframe reshape

我努力从Excel迁移到Python,因为我已经习惯了让所有东西都可见。下面,我试图将表格从顶部转换为下表。想要使用熊猫数据帧,但如果有更好的解决方案,那么我很乐意听到它。

另外,作为一个额外的好处,如果有人可以指出一些同情视觉excel转换为Python的资源,那将是非常棒的!

*注意,实际上有大约350行,我们可以使用ID12和Code 12.此外,状态可以在我的原始数据源中重复,就像VA在这里一样。

State    ID     Code    ID2     Code2   ID3   Code3
VA       RIC    733     FFX     787     NULL  NULL
NC       WIL    798     GSB     698     WSS   444
VA       NPN    757     NULL    NULL    NULL  NULL

必需输出:

State  ID   Code
VA     RIC  733
VA     FFX  787
VA     NPN  757
NC     WIL  798
NC     GSB  698
NC     WSS  444

1 个答案:

答案 0 :(得分:4)

我认为lreshape对于这种情况是理想的。

pd.lreshape(df, {'Code': ['Code', 'Code2', 'Code3'], 'ID': ['ID', 'ID2', 'ID3']})  \       
  .sort_values('State', ascending=False)

  State   Code   ID
0    VA  733.0  RIC
2    VA  757.0  NPN
3    VA  787.0  FFX
1    NC  798.0  WIL
4    NC  698.0  GSB
5    NC  444.0  WSS

除了@ MaxU之外,更通用的解决方案是:

code_list = [col for col in list(df) if col.startswith('Code')]
id_list = [col for col in list(df) if col.startswith('ID')]

pd.lreshape(df, {'Code': code_list, 'ID': id_list}).sort_values('State', ascending=False)