熊猫:从长到宽投射/旋转多个列?

时间:2018-10-02 16:55:08

标签: python pandas

我正在尝试根据多列从长到宽重新配置我的数据。我通常对强制转换功能(来自R)和数据透视功能很熟悉,但都没有得到期望的结果。

请参见下面-当前表格是我当前拥有的:

d = {'Name': ['Tom','Tom','Tom','Tom','Tom','Tom','Jerry','Jerry','Jerry','Jerry'], 'col2': ['A','B','A','B','A','B','A','B','A','B'],
     'Result':[10,5,9,2,0,1,10,2,4,5],'Change:':[8,8,4,4,3,3,0,0,8,8]}
df = pd.DataFrame(data=d)

然后,所示的中间表是我想要的宽数据,我在其中按名称和日期分组,然后将“结果”列作为值。对于每个名称日期,只有一个Change结果-因此,我需要加宽的唯一一列是Type。

最后一步是为类型A和类型B的每个名称日期计算r ^ 2值。这就是输出表。

我尝试使用下面的cast function以及数据透视功能。任何帮助将不胜感激!

zz_cast=cast(df,'Type','Result(%)')
zz_pivot=df.pivot(index='Date',columns='Type', values='Result (%)')

enter image description here

1 个答案:

答案 0 :(得分:1)

这是我创建中间表(宽数据)的过程:

import numpy as np
import pandas as pd

d = {'Name': ['Tom','Tom','Tom','Tom','Tom','Tom','Jerry','Jerry','Jerry','Jerry'], 
 'Date': ['2018/07/31','2018/07/31','2018/04/30','2018/04/30','2018/01/31','2018/01/31','2018/10/31','2018/10/31','2018/07/31','2018/07/31'], 
 'Type': ['A','B','A','B','A','B','A','B','A','B'],
 'Result':[10,5,9,2,0,1,10,2,4,5],'Change:':[8,8,4,4,3,3,0,0,8,8]}
df = pd.DataFrame(data=d)

df.set_index(['Name','Date','Type']).unstack().reset_index()