我有以下示例数据集,并且我试图对其进行重组,以使每个级别的values
,SUBJECT
和{{1}都有更多的block_name
列},最好放在新的列名之前。我已经尝试过拆叠和旋转,但只有错误才没有成功。
condition_name
例如,我想留下以下内容:
SUBJECT block_name condition_name values
5 A S 0.96
5 A C 1.00
5 F S 0.92
5 F C 0.93
5 Te S 0.85
5 Te C 0.71
5 To S 0.88
5 To C 1.00
6 A S 0.96
6 A C 1.00
6 F S 0.92
6 F C 0.71
6 Te S 1.00
6 Te C 1.00
6 To S 0.69
6 To C 0.86
7 A S 1.00
7 A C 1.00
7 F S 0.88
7 F C 0.93
7 Te S 0.85
7 Te C 1.00
7 To S 0.62
7 To C 0.93
答案 0 :(得分:1)
将set_index
与unstack
一起使用MultiIndex
的2个级别,然后将list comprehension
中的列名称展平:
df = df.set_index(['SUBJECT','block_name','condition_name'])['values'].unstack([1,2])
#python 3.6+ solution
df.columns = [f'{i}_{j}_values' for i, j in df.columns]
#python bellow 3.6
#df.columns = ['{}_{}_values'.format(i, j) for i, j in df.columns]
print (df)
A_S_values A_C_values F_S_values F_C_values Te_S_values \
SUBJECT
5 0.96 1.0 0.92 0.93 0.85
6 0.96 1.0 0.92 0.71 1.00
7 1.00 1.0 0.88 0.93 0.85
Te_C_values To_S_values To_C_values
SUBJECT
5 0.71 0.88 1.00
6 1.00 0.69 0.86
7 1.00 0.62 0.93
最后必要时:
df = df.reset_index()
print (df)
SUBJECT A_S_values A_C_values F_S_values F_C_values Te_S_values \
0 5 0.96 1.0 0.92 0.93 0.85
1 6 0.96 1.0 0.92 0.71 1.00
2 7 1.00 1.0 0.88 0.93 0.85
Te_C_values To_S_values To_C_values
0 0.71 0.88 1.00
1 1.00 0.69 0.86
2 1.00 0.62 0.93