首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中转换具有顶部和侧面标题的表

在python中转换具有顶部和侧面标题的表
EN

Stack Overflow用户
提问于 2018-02-10 08:07:05
回答 2查看 44关注 0票数 2

我有一个当前格式的表:

代码语言:javascript
复制
import pandas as pd

dic = {
   201801 : {'A': 2.4, 'B': 3.4, 'C': 4.4, 'D': 5.4, },
   201802 : {'A': 2.4, 'B': 3.4, 'C': 4.4, 'D': 5.4, },
   201803 : {'A': 2.4, 'B': 3.4, 'C': 4.4, 'D': 5.4, }, 
   201804 : {'A': 2.4, 'B': 3.4, 'C': 4.4, 'D': 5.4, }, 
   201805 : {'A': 2.4, 'B': 3.4, 'C': 4.4, 'D': 5.4, }, 
   201806 : {'A': 2.4, 'B': 3.4, 'C': 4.4, 'D': 5.4, }, 
   201807 : {'A': 2.4, 'B': 3.4, 'C': 4.4, 'D': 5.4, }, 
   }

df2 = pd.DataFrame(dic)
print(df2)

输出:

代码语言:javascript
复制
    201801  201802  201803  201804  201805  201806  201807
A     2.4     2.4     2.4     2.4     2.4     2.4     2.4
B     3.4     3.4     3.4     3.4     3.4     3.4     3.4
C     4.4     4.4     4.4     4.4     4.4     4.4     4.4
D     5.4     5.4     5.4     5.4     5.4     5.4     5.4

我想将此表转换为以下格式:

代码语言:javascript
复制
201801      A   2.4
201801      B   3.4
201801      C   4.4
201801      D   5.4
201802      A   2.4
201802      B   3.4
201802      C   4.4
201802      D   5.4
201803      A   2.4
201803      B   3.4
201803      C   4.4
201803      D   5.4
201804      A   2.4
201804      B   3.4
201804      C   4.4
201804      D   5.4

我如何使用Python Pandas来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2018-02-13 03:49:32

看起来你想把你的数据从宽格式转换成长格式。您可以转置数据,然后将其堆叠:

代码语言:javascript
复制
df2.T.stack()

201801  A    2.4
        B    3.4
        C    4.4
        D    5.4
201802  A    2.4
        B    3.4
        C    4.4
        D    5.4
# ...

或者,您可以使用df2.stack().swaplevel(),但默认情况下,这将按“字母”索引排序,而不是按日期排序。

比较这两种方法,第一种方法要快得多。

代码语言:javascript
复制
%timeit df2.T.stack()
693 µs ± 131 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit df2.stack().swaplevel().sort_index()
2.64 ms ± 182 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
票数 0
EN

Stack Overflow用户

发布于 2018-02-13 05:37:39

如前所述,只需使用pandas melt重塑宽到长的格式:

代码语言:javascript
复制
# RESET INDEX AS A REGULAR COLUMN
df = df.reset_index()

# MELT WIDE TO LONG FORMAT
finaldf = pd.melt(df, id_vars='index', var_name='year_month')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48715854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档