代码之家  ›  专栏  ›  技术社区  ›  ca9163d9

转换数据帧-取消激活?

  •  0
  • ca9163d9  · 技术社区  · 5 年前

    我有以下数据帧 df = pd.read_excel('...')

    Date     Id V1  V2  V3
    2020-1-1  1 10 100 NaN
    2020-1-1  2 20 120  23
    2020-1-1  3 11 101 NaN
    

    我要把它变成

    Date      Name Value
    2020-1-1  1_V1    10
    2020-1-1  1_V2   100
    2020-1-1  2_V1    20
    2020-1-1  2_V2   120
    2020-1-1  2_V3    23
    2020-1-1  3_V1    11
    2020-1-1  3_V2   101
    

    'Name' 列是 Id 和列名 V1 , V2 V3 等等 NaN 值被忽略。

    2 回复  |  直到 5 年前
        1
  •  2
  •   BENY    5 年前

    让我们试试 melt

    s = df.melt(['Date','Id']).dropna()
    s['name'] = s.pop('variable') +'_'+ s.pop('Id').astype(str)
    s
           Date  value  name
    0  2020-1-1   10.0  V1_1
    1  2020-1-1   20.0  V1_2
    2  2020-1-1   11.0  V1_3
    3  2020-1-1  100.0  V2_1
    4  2020-1-1  120.0  V2_2
    5  2020-1-1  101.0  V2_3
    7  2020-1-1   23.0  V3_2
    
        2
  •  1
  •   Michael Szczesny    5 年前

    你可以用 df.melt

    df1 = df.melt(['Date','Id']).dropna()
    df1 = df1.assign(Name=df1.Id.astype(str) + '_' + df1.variable)
    df1[['Date','Name','value']]
    

           Date  Name  value
    0  2020-1-1  1_V1   10.0
    1  2020-1-1  2_V1   20.0
    2  2020-1-1  3_V1   11.0
    3  2020-1-1  1_V2  100.0
    4  2020-1-1  2_V2  120.0
    5  2020-1-1  3_V2  101.0
    7  2020-1-1  2_V3   23.0