以下数据框具有格式为的多个列名称item:district
:
date price:dc price:xc price:cy ratio:dc ratio:xc ratio:cy
0 2017 12 11 14 0.1 0.1 0.3
1 2018 14 12 15 0.2 0.7 0.6
2 2019 13 13 16 0.5 -0.2 0.8
是否可以按如下所示将其转换为新的数据框?谢谢。
date district price ratio
0 2017 dc 12 0.1
1 2018 dc 14 0.2
2 2019 dc 13 0.5
3 2017 xc 11 0.1
4 2018 xc 12 0.7
5 2019 xc 13 -0.2
6 2017 cy 14 0.3
7 2018 cy 15 0.6
8 2019 cy 16 0.8
您可以MultiIndex
使用:
by创建的列,bystr.split
创建的索引,by by的非:
列DataFrame.set_index
,再按by进行重塑DataFrame.stack
:
df = df.set_index('date')
df.columns = df.columns.str.split(':', expand=True)
df = df.stack().rename_axis(('date','district')).reset_index()
print (df)
date district price ratio
0 2017 cy 14 0.3
1 2017 dc 12 0.1
2 2017 xc 11 0.1
3 2018 cy 15 0.6
4 2018 dc 14 0.2
5 2018 xc 12 0.7
6 2019 cy 16 0.8
7 2019 dc 13 0.5
8 2019 xc 13 -0.2
如果排序很重要,则一种解决方案是创建有序分类:
df = df.set_index('date')
df.columns = df.columns.str.split(':', expand=True)
lvl = pd.CategoricalIndex(df.columns.levels[1],
ordered=True,
categories=df.columns.get_level_values(1).drop_duplicates())
df.columns = df.columns.set_levels(lvl, level=1)
df = df.stack().sort_index(level=[1,0]).rename_axis(('date','district')).reset_index()
print (df)
date district price ratio
0 2017 dc 12 0.1
1 2018 dc 14 0.2
2 2019 dc 13 0.5
3 2017 xc 11 0.1
4 2018 xc 12 0.7
5 2019 xc 13 -0.2
6 2017 cy 14 0.3
7 2018 cy 15 0.6
8 2019 cy 16 0.8
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句