【问题标题】:Merge levels of same variable which are in consecutive columns合并连续列中相同变量的级别
【发布时间】:2019-05-28 04:52:05
【问题描述】:

我有一个 csv 数据文件,它有 2 个标题,这意味着一个标题作为问题,第二个作为子标题,它有多个级别或主标题的答案。当前的 csv 如下表所示

标题 你住在哪个国家?你之前去过哪个国家? 用户 加拿大 美国 英国 墨西哥 挪威 印度 新加坡 巴基斯坦 用户 1 加拿大 新加坡 用户 2 英国 印度 用户 3 墨西哥 巴基斯坦 用户 4 挪威 印度

我需要把它转换成下表

用户 你住在哪个国家?你之前去过哪个国家? 用户 1 加拿大 新加坡 用户 2 英国 印度 用户 3 挪威 巴基斯坦 用户 4 墨西哥 印度

有人可以帮我解决这个问题吗?

这就是我的数据的样子

我的输入文件看起来像这样 这就是我的最终输出的样子

【问题讨论】:

    标签: python pandas csv data-transform


    【解决方案1】:

    先用bfill回填缺失值,然后选择第一列并用DataFrame.droplevel删除第二级MultiIndex

    print (df.columns)
    MultiIndex(levels=[['Header', 'Which country do you live?'],
                       ['Canada', 'Mexico', 'UK', 'USA', 'Users']],
               codes=[[0, 1, 1, 1, 1], [4, 0, 3, 2, 1]])
    

    #if first column is not index, create it
    #df = df.set_index([df.columns[0]])
    #if empty strings repalce them to NaNs
    #df = df.replace('', np.nan)
    
    df = df.bfill(axis=1).iloc[:, 0].reset_index().droplevel(level=1, axis=1)
    print (df)
       Header Which country do you live?
    0  User 1                     Canada
    1  User 2                         UK
    2  User 3                     Mexico
    3  User 4                     Norway
    

    编辑:

    df = df.groupby(level=0, axis=1).apply(lambda x: x.bfill(axis=1).iloc[:, 0])
    print (df)
       Header Which country do you live? Which country you previously visited?
    0  User 1                     Canada                             Singapore
    1  User 2                         UK                                 India
    2  User 3                     Mexico                              Pakistan
    3  User 4                     Norway                                 India
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多