在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是否要回答您的问题?