我有一张目前采用这种格式的表格:
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 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
我想将此表格转换为以下格式:
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执行此操作?
答案 0 :(得分:0)
您似乎希望将数据从宽格式转换为长格式。您可以转置数据然后将其堆叠起来:
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)
答案 1 :(得分:0)
如上所述,只需使用pandas melt重塑宽到长的格式:
# 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')