Python 将数据框列复制到子列

Python 将数据框列复制到子列,python,pandas,Python,Pandas,我想将列转换为子列 假设数据是相似的 Q1 Q2:Q21 Q2:Q22 Q2:Q23 Q3:Q31 Q3:Q32 0 yes green blue green bus car 1 no red orange blue car bike 2 yes green yellow black car walk 3 yes yellow green brown bus walk 4 no gr

我想将列转换为子列

假设数据是相似的

    Q1  Q2:Q21  Q2:Q22 Q2:Q23 Q3:Q31 Q3:Q32
0  yes   green    blue  green    bus    car
1   no     red  orange   blue    car   bike
2  yes   green  yellow  black    car   walk
3  yes  yellow   green  brown    bus   walk
4   no   green   green    red    car    bus
在重塑立柱之后,我想:

    Q1              Q2               Q3
    Q1     Q21     Q22    Q23    Q31    Q32
0  yes   green    blue  green    bus    car
1   no     red  orange   blue    car   bike
2  yes   green  yellow  black    car   walk
3  yes  yellow   green  brown    bus   walk
4   no   green   green    red    car    bus
在这里,我尝试了什么

import pandas as pd
survey = pd.read_csv('survey.csv')
# first column names
survey_cols = [col.split(':')[0] for col in survey.columns]
# unique column names
survey_ucols = []
for e in survey_cols:
    if e not in survey_ucols:
        survey_ucols.append(e)
# second column names, subcolumns
survey_subcols = []
for col in survey_ucols:
    survey_subcols.append([subcol.split(':')[-1] for subcol in survey.columns if col in subcol])
# create new df
tuples = list(zip(survey_ucols,survey_subcols))
cols = pd.MultiIndex.from_tuples(tuples, names=['mainQ', 'subQ'])
survey_new = pd.DataFrame(survey, columns=cols)

提前感谢

您可以使用和创建帮助器数据框,因此可以通过
ffill
向前填充每行缺少的值,最后分配回:

详细信息

print (df)
         0    1
Q1      Q1   Q1
Q2:Q21  Q2  Q21
Q2:Q22  Q2  Q22
Q2:Q23  Q2  Q23
Q3:Q31  Q3  Q31
Q3:Q32  Q3  Q32

@亚图-谢谢:)如果我的回答有帮助,别忘了接受它。要将答案标记为已接受,请单击答案旁边的复选标记,将其从空心切换为绿色()。非常感谢。
print (df)
         0    1
Q1      Q1   Q1
Q2:Q21  Q2  Q21
Q2:Q22  Q2  Q22
Q2:Q23  Q2  Q23
Q3:Q31  Q3  Q31
Q3:Q32  Q3  Q32