python - 熊猫数据框列到子列
问题描述
我想将列转换为子列。
假设数据是这样的;
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)
提前致谢
解决方案
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
推荐阅读
- linux - 期望脚本无法将密码发送到 cryptsetup
- python - 加载和编译 Keras 模型的问题
- javascript - 通过 sendgrid (node.js) 使用动态模板
- python - 从列表选择中删除数据框中的几列
- javascript - 如何将 arr.includes() 与对象一起使用
- python - 如何直接从python脚本关闭命令提示符?
- mysql - 如果找到数字并插入新列mysql,如何拆分?
- javascript - 未处理的拒绝 (FirebaseError):使用无效数据调用的函数 DocumentReference.set()
- mysql - Mysql errno 1242 子查询返回多于一列
- android - 如何使用相同的来源制作不同的应用程序