Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中转换具有顶部和侧面标题的表_Python_Pandas - Fatal编程技术网

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

在python中转换具有顶部和侧面标题的表,python,pandas,Python,Pandas,我有一个表格,目前采用这种格式: 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

我有一个表格,目前采用这种格式:

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)
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
输出:

    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
我想将此表转换为以下格式:

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)
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实现这一点?

您似乎希望将数据从宽格式转换为长格式。您可以转置数据,然后将其堆叠:

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()
,但默认情况下,这将按“字母”索引排序,而不是按日期排序

与两者相比,前者要快得多

%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)

如前所述,只需使用pandas将宽格式重塑为长格式:

# 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')

首先,以文本形式键入这些图像。除非需要传达布局错误,否则避免使用屏幕截图。我们无法将您的图像复制并粘贴到我们的IDE中,以使用您的数据。使用{}将表格式化为代码,以便它们对齐,只需使用:
df=df.reset_index();pd.melt(df,id\u vars='index',var\u name='year\u month')
@PatrickArtner我尝试使用table,但格式有问题。请再试一次。这是可能的。格式为代码-请参阅我的编辑。@Parfait是否要回答您的问题?