假设我的数据格式如下:
Time, Type, Subtype, Value
0,A,Ab,1
0,A,Ac,2
0,B,Ba,1
我需要:
Time, Type-A-Ab-Value, Type-A-Ac-Value, Type-B-Ba-Value
0, 1, 2, 1
是否有一个熊猫原语可以一击解决这个问题?
答案 0 :(得分:2)
使用DataFrame.set_index
设置多级索引,然后在1, 2
级别上使用DataFrame.unstack
重塑数据框,然后使用.map
展平MultiIndex
列:
df1 = df.set_index(['Time', 'Type', 'Subtype']).unstack(level=[1, 2])
df1.columns = df1.columns.map(lambda s: 'Type-' + '-'.join(s[1:]) + '-Value')
或者,也可以使用DataFrame.pivot
:
df['pvt'] = 'Type-' + df['Type'] + '-' + df['Subtype'] + '-Value'
df1 = df.pivot('Time', 'pvt', 'Value').rename_axis(columns=None)
结果:
print(df1)
Type-A-Ab-Value Type-A-Ac-Value Type-B-Ba-Value
Time
0 1 2 1