如何将熊猫数据框从宽形拆分为高形

Posted

技术标签:

【中文标题】如何将熊猫数据框从宽形拆分为高形【英文标题】:how to split a pandas dataframe from wide to tall shape 【发布时间】:2020-05-11 19:31:40 【问题描述】:

我有一个包含此结构的数据框,并且我已经弄清楚了如何通过这样做来“取消透视”df,但我很确定这不是我想要的更 Pythonic 的方式。你能建议一个更好的方法吗?:

v = [['BIN_ID_WDM': i, 'DSIMILARITY': df1.D1[i], 'BIN_ID_IHS': df1.ID1[i],
      'BIN_ID_WDM': i, 'DSIMILARITY': df1.D2[i], 'BIN_ID_IHS': df1.ID2[i],
      'BIN_ID_WDM': i, 'DSIMILARITY': df1.D3[i], 'BIN_ID_IHS': df1.ID3[i],
      'BIN_ID_WDM': i, 'DSIMILARITY': df1.D4[i], 'BIN_ID_IHS': df1.ID4[i],
      'BIN_ID_WDM': i, 'DSIMILARITY': df1.D5[i], 'BIN_ID_IHS': df1.ID5[i]]
      for i in df1.index]

数据框:

    D1  D2  D3  D4  D5  ID1 ID2 ID3 ID4 ID5
WMAC                                        
258403  0.002665    0.003306    0.001396    0.003395    0.003741    100000141725    100000141709    100000141696    100000141676    100000141294
105692  0.000016    0.000257    0.000264    0.000298    0.000349    100000030110    100000030243    100000030109    100000030166    100000323212
70795   0.001588    0.001564    0.000019    0.001828    0.001828    100000040111    100000028683    100000034744    100000324405    100000038952

【问题讨论】:

【参考方案1】:

IIUC,使用pd.wide_to_long

pd.wide_to_long(df, ['D', 'ID'], 'WMAC', 'No')

输出:

                  D            ID
WMAC   No                        
258403 1   0.002665  100000141725
105692 1   0.000016  100000030110
70795  1   0.001588  100000040111
258403 2   0.003306  100000141709
105692 2   0.000257  100000030243
70795  2   0.001564  100000028683
258403 3   0.001396  100000141696
105692 3   0.000264  100000030109
70795  3   0.000019  100000034744
258403 4   0.003395  100000141676
105692 4   0.000298  100000030166
70795  4   0.001828  100000324405
258403 5   0.003741  100000141294
105692 5   0.000349  100000323212
70795  5   0.001828  100000038952

【讨论】:

以上是关于如何将熊猫数据框从宽形拆分为高形的主要内容,如果未能解决你的问题,请参考以下文章

熊猫如何按间隔按列拆分数据帧

如何使用熊猫拆分数据框?

如何在熊猫数据框中拆分值并插入新行?

将熊猫数据框列列表值拆分为重复行[重复]

将列表列表拆分为熊猫数据框[重复]

根据索引的接近程度拆分熊猫数据框