在Pandas中将一级混合标头数据帧转换为垂直数据帧

阿邦

以下数据框具有格式为的多个列名称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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 Pandas 数据帧转换为 LabeledPoint RDD

来自分类Dev

如何在R中将xml数据转换为数据帧

来自分类Dev

如何在R中将xml数据转换为数据帧

来自分类Dev

Ho在python中将pd数据帧转换为矩阵结构

来自分类Dev

在R中将数据帧从“宽”格式转换为“长”格式

来自分类Dev

如何在R中将Json转换为数据帧

来自分类Dev

在Scala Spark中将嵌套的JSON转换为数据帧

来自分类Dev

在Spark中将数据帧转换为rdd的成本

来自分类Dev

在R中将数据帧转换为TS对象

来自分类Dev

如何在pyspark中将密集向量转换为数据帧?

来自分类Dev

在数据帧中将NaN值转换为0.0

来自分类Dev

如何在R中将数据帧转换为列表?

来自分类Dev

在R中将数据帧转换为时间序列

来自分类Dev

如何在pyspark中将嵌套字典转换为数据帧?

来自分类Dev

如何在Zeppelin(Scala)中将数据帧转换为Seq

来自分类Dev

如何在R中将数据帧转换为json格式

来自分类Dev

在R中将数据帧转换为时间序列

来自分类Dev

Ho在python中将pd数据帧转换为矩阵结构

来自分类Dev

如何在R中将数据帧转换为对数?

来自分类Dev

无法在R中将数据帧转换为设计矩阵

来自分类Dev

在pyspark中将rdd转换为没有模式的数据帧

来自分类Dev

如何在R中删除数据帧头的第一级?

来自分类Dev

在R中将两个数组转换为一个数据帧

来自分类Dev

如何将for循环的结果转换为pandas数据帧?

来自分类Dev

将 Pandas 数据帧转换为字典并添加公共键值对

来自分类Dev

Beckhoff TwinCat Scope CSV 格式转换为 Pandas 数据帧

来自分类Dev

将宽数据帧转换为长数据帧

来自分类Dev

如何将字典的数据帧转换为数据帧?

来自分类Dev

将 Spark 数据帧 Groupby 转换为一系列数据帧

Related 相关文章

热门标签

归档