我有一个当前格式的表:
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来做这件事?
发布于 2018-02-13 03:49:32
看起来你想把你的数据从宽格式转换成长格式。您可以转置数据,然后将其堆叠:
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)发布于 2018-02-13 05:37:39
如前所述,只需使用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')https://stackoverflow.com/questions/48715854
复制相似问题