【问题标题】:Pandas melt function using column index positions rather than colum names使用列索引位置而不是列名的 Pandas 融化函数
【发布时间】:2021-01-10 16:39:44
【问题描述】:

有没有办法将参数的列名设置为列index 位置,而不是列名? 我看到的每个示例都用value_vars 上的列名编写。我需要使用列索引。

例如,而不是:

df2 = pd.melt(df,value_vars=['asset1','asset2'])

使用类似于:

df2 = pd.melt(df,value_vars=[0,1])

【问题讨论】:

    标签: python pandas dataframe melt


    【解决方案1】:

    通过索引选择列名:

    df = pd.DataFrame({
            'asset1':list('acacac'),
             'asset2':[4]*6,
             'A':[7,8,9,4,2,3],
             'D':[1,3,5,7,1,0],
             'E':[5,3,6,9,2,4]
    })
    
    
    
    df2 = pd.melt(df,
                  id_vars=df.columns[[0,1]],
                  value_vars=df.columns[[2,3]], 
                  var_name= 'c_name', 
                  value_name='Value')
    print (df2)
    
       asset1  asset2 c_name  Value
    0       a       4      A      7
    1       c       4      A      8
    2       a       4      A      9
    3       c       4      A      4
    4       a       4      A      2
    5       c       4      A      3
    6       a       4      D      1
    7       c       4      D      3
    8       a       4      D      5
    9       c       4      D      7
    10      a       4      D      1
    11      c       4      D      0
    

    【讨论】:

    • 谢谢,如果我需要为参数 var_name 声明一个列,我应该怎么做? (而不是 'c_name') df_par = df.melt(id_vars=df.columns[[0,1]], var_name= 'c_name', value_name='Value')
    • @MerveDemirci - 你觉得df2 = pd.melt(df,value_vars=df.columns[[0]]) 吗?
    • 是的,我试过了,但它给出了类型错误:在 masked_arith_op raise TypeError(type(y)) TypeError:
    • @MerveDemirci - 但var_name 是新列名的字符串,所以不能这样使用
    • 是的,你说得对,我当然需要给出一个名字。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多