我有一个以下形式的 pandas dataframe/csv
date Country Type Val
2013-01-01 USA x 23
2013-01-01 USA y 13
2013-01-01 MX x 11
2013-01-01 MX y 14
2013-01-02 USA x 20
2013-01-02 USA y 19
2013-01-02 MX x 14
2013-01-02 MX y 16
我想将其转换为表格
date Country x y
2013-01-01 USA 23 13
2013-01-01 MX 11 14
2013-01-02 USA 20 19
2013-01-02 MX 14 16
一般来说,我正在寻找一种使用单列的唯一值来转换表的方法。
我看过pivot
and groupby
但没有得到确切的形式。
提示:这可能可以通过以下方式解决pivot
但我没能拿到表格
可能不是最优雅的方式,但使用unstack http://pandas.pydata.org/pandas-docs/stable/reshaping.html#reshaping-by-stacking-and-unstacking:
>>> df
date Country Type Val
0 2013-01-01 USA x 23
1 2013-01-01 USA y 13
2 2013-01-01 MX x 11
3 2013-01-01 MX y 14
4 2013-01-02 USA x 20
5 2013-01-02 USA y 19
6 2013-01-02 MX x 14
7 2013-01-02 MX y 16
>>> df.set_index(['date', 'Country', 'Type']).unstack('Type').reset_index()
date Country Val
Type x y
0 2013-01-01 MX 11 14
1 2013-01-01 USA 23 13
2 2013-01-02 MX 14 16
3 2013-01-02 USA 20 19
更一般地说,删除结果中奇怪的分层列:
>>> cols = [c for c in df.columns if c not in {'Type', 'Val'}]
>>> df2 = df.set_index(cols + ['Type']).unstack('Type')
>>> df2
Val
Type x y
date Country
2013-01-01 MX 11 14
USA 23 13
2013-01-02 MX 14 16
USA 20 19
>>> df2.columns = df2.columns.levels[1]
>>> df2.columns.name = None
>>> df2
x y
date Country
2013-01-01 MX 11 14
USA 23 13
2013-01-02 MX 14 16
USA 20 19
>>> df2.reset_index()
date Country x y
0 2013-01-01 MX 11 14
1 2013-01-01 USA 23 13
2 2013-01-02 MX 14 16
3 2013-01-02 USA 20 19
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)