【问题标题】:change column headers to be values in rows将列标题更改为行中的值
【发布时间】:2021-01-08 07:24:38
【问题描述】:

假设我有一个具有这种结构的数据集

pet_name    doggo     floofer    puppo     pupper 
A           None      floofer    None       None
B           doggo     None       None       None  
C           None      None       puppo      None 
D           None      None       None       pupper
E           doggo     floofer    None       None 
F           None      None       puppo      pupper
G           None      None       None       None 

我想要一个名为 dog_stage 的新列,其中包含变量(doggo、floofer、puppo、pupper)

最终的结果会是这样的

name    dog_stage
A       floofer
B       doggo
C       puppo
D       pupper
E       doggo, floofer
F       puppo, pupper
G       None 

并删除列

【问题讨论】:

    标签: python pandas dataframe data-cleaning data-wrangling


    【解决方案1】:

    对于这两种解决方案,只过滤必要的列:

    df = df[['name','doggo' , 'floofer', 'puppo', 'pupper']].copy()
    

    如果不包含None 或类似字符串None 和DataFrame.dot,则第一个解决方案连接列名称,以通过列名称进行矩阵乘法:

    #convert pet_name to index, if possible strings None replace and test not NaNs or not Nones
    df1 = df.set_index('name').replace('None', np.nan).notna()
    
    df1 = df1.dot(df1.columns + ',').str[:-1].reset_index(name='dog_stage')
    print (df1)
          name      dog_stage
    0        A        floofer
    1        B          doggo
    2        C          puppo
    3        D         pupper
    4        E  doggo,floofer
    5        F   puppo,pupper
    6        G         
    

    如果不是 None 在 lambda 函数中,另一个想法是加入每一行:

    df1 = (df.set_index('name')
             .replace('None', np.nan)
             .apply(lambda x: ','.join(x.dropna()), axis=1)
             .reset_index(name='dog_stage'))
    

    【讨论】:

    • 但我有大约 10 列,而不仅仅是一个
    • @Moath - 是的,它适用于多个列,有问题吗?你能说得更具体点吗?
    • 它给了我这个错误 TypeError: sequence item 0: expected str instance, int found
    • @Moath - 在第一个或第二个解决方案中?
    • 第一个建议给了我错误 TypeError: set_index() 需要 2 到 6 个位置参数,但给出了 9 个
    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2014-04-25
    • 2021-09-30
    • 1970-01-01
    • 2022-11-25
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多