我正在尝试将一个长数据帧转换为一个宽数据帧,但似乎无法使任何东西按我需要的方式工作。我试过使用转置,融合,旋转,但语法不正确。如果您需要更多信息,请告诉我。您能提供的任何帮助将不胜感激!
详细信息:
原始长桌:
| Emp_ID | attempt | results | name | date |
|--------|---------|---------|------|---------|
| 123 |1 |fail |John |1/21/2019|
| 123 |2 |pass |John |1/21/2019|
| 145 |1 |fail |Todd |2/04/2019|
| 145 |2 |fail |Todd |2/05/2019|
| 145 |3 |pass |Todd |2/05/2019|
| 656 |1 |pass |Sarah |3/02/2019|
| 767 |1 |pass |Jim |3/14/2019|
| 3453 |1 |fail |Rose |3/15/2019|
| 3453 |2 |pass |Rose |3/15/2019|
新宽表:我需要的样子(我只包括3条记录,因为它要花很长时间才能写出来,但是理想情况下,我需要新格式的原始表中的所有记录):
| Emp_ID | attempt1_results | attempt1_name | attempt1_date | attempt2_results | attempt2_name | attempt2_ date | attempt3_results | attempt3_name | attempt3_date |
|--------|------------------|---------------|---------------|------------------|---------------|----------------|------------------|---------------|---------------|
| 123 |fail |John |1/21/2019 |pass |John |1/21/2019 | | | |
| 145 |fail |Todd |2/04/2019 |fail |Todd |2/05/2019 |pass |Todd |2/05/2019 |
| 656 |pass |Sarah |3/02/2019 | | | | | | |
代码:我尝试了一些不同的操作,但正如我所说,我无法使它们正常工作:
数据: df = pd.read_csv(self.results_file_path)
融合:
df1 = df(id_vars=['Emp_ID'], value_vars=list(df.columns), var_name=None, col_level=0)
取消堆叠:
d1 = df.set_index(['Emp_Id', 'attempt', 'results', 'name', 'date']).unstack()
d1.columns = d1.columns.map(lambda x: '{}attempt_{}'.format(*x))
d1.reset_index(inplace=True)
枢轴
d2 = df.pivot(index='Emp_ID', columns=('attempt', 'results', 'name', 'date'))