我有一个表格的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
Run Code Online (Sandbox Code Playgroud)
我想将其转换为表单
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
Run Code Online (Sandbox Code Playgroud)
一般来说,我正在寻找一种使用单列的唯一值转换表的方法.
我看过了pivot,groupby但没有得到确切的表格.
提示:可能这是可以解决的,pivot但我无法得到表格
Dou*_*gal 10
可能不是最优雅的方式,但使用unstack:
>>> 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
Run Code Online (Sandbox Code Playgroud)
更一般地说,删除结果中的奇怪分层列:
>>> 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
Run Code Online (Sandbox Code Playgroud)