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

Stacking a pair of columns by looking at the first column

我很难从 Excel 转移到 Python,因为我已经习惯了让所有内容都可见。下面,我试图将顶部的 table 转换为下面的 table。想使用 pandas 数据帧,但如果有更好的不同解决方案,我很想听听。

此外,作为额外的奖励,如果有人可以向我指出一些对视觉 excel 转换为 Python 的资源,那就太棒了!

*注意,实际上有大约 350 行,我们可以达到 ID12 和代码 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

我认为 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)