1

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

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

我需要将其转换为下表

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

有人可以帮我弄这个吗?

这就是我的数据的样子 在此处输入图像描述

我的输入文件看起来像这样 在此处输入图像描述 ,这就是我的最终输出的样子 在此处输入图像描述

4

1 回答 1

2

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

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
于 2019-05-28T05:14:11.633 回答