为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫数据框列到子列

熊猫数据框列到子列

浮云间 2021-12-09 15:26:27
我想将列转换为子列。假设数据是这样的;    Q1  Q2:Q21  Q2:Q22 Q2:Q23 Q3:Q31 Q3:Q320  yes   green    blue  green    bus    car1   no     red  orange   blue    car   bike2  yes   green  yellow  black    car   walk3  yes  yellow   green  brown    bus   walk4   no   green   green    red    car    bus对列进行整形后,我想拥有;    Q1              Q2               Q3    Q1     Q21     Q22    Q23    Q31    Q320  yes   green    blue  green    bus    car1   no     red  orange   blue    car   bike2  yes   green  yellow  black    car   walk3  yes  yellow   green  brown    bus   walk4   no   green   green    red    car    bus在这里,我尝试过的;import pandas as pdsurvey = pd.read_csv('survey.csv')# first column namessurvey_cols = [col.split(':')[0] for col in survey.columns]# unique column namessurvey_ucols = []for e in survey_cols:    if e not in survey_ucols:        survey_ucols.append(e)# second column names, subcolumnssurvey_subcols = []for col in survey_ucols:    survey_subcols.append([subcol.split(':')[-1] for subcol in survey.columns if col in subcol])# create new dftuples = list(zip(survey_ucols,survey_subcols))cols = pd.MultiIndex.from_tuples(tuples, names=['mainQ', 'subQ'])survey_new = pd.DataFrame(survey, columns=cols)提前致谢
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以使用Index.to_series和创建辅助数据帧Series.str.split,因此可能向前填充每行的缺失值ffill,最后分配回MultiIndex.from_arrays:


df = survey.columns.to_series().str.split(':', expand=True).ffill(axis=1)

survey.columns = pd.MultiIndex.from_arrays([df[0].tolist(), df[1].tolist()])

#simplified

#survey.columns = [df[0].tolist(), df[1].tolist()]

print (survey)

    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

详情:


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


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信