我的CSV看起来像:
"a","b","c","d"
1, "x", 1, 1
1, "y", 2, 2
我希望将它基于“b”列转换为
"a", "x_c", "y_c", "x_d", "y_d"
1, 1, 2, 1, 2
我已尝试使用pivot和unstack。大熊猫有缺点吗?
编辑:我有多列,因此我需要附加后缀/前缀
答案 0 :(得分:5)
使用pivot_table
:
df = df.pivot_table(index='a',columns='b', values=['c', 'd'], aggfunc=np.mean)
#Multiindex to columns
df.columns = df.columns.map(lambda x: '{}_{}'.format(x[1], x[0]))
df = df.reset_index()
print (df)
a x_c y_c x_d y_d
0 1 1 2 1 2
如果重复,则应用aggfunc:
print (df)
a b c d
0 1 x 1 1 <-duplicates for 1, x
1 1 y 2 2
2 1 x 4 2 <-duplicates for 1, x
3 2 y 2 3
df = df.pivot_table(index='a',columns='b', values=['c', 'd'], aggfunc=np.mean)
df.columns = df.columns.map(lambda x: '{}_{}'.format(x[1], x[0]))
df = df.reset_index()
print (df)
a x_c y_c x_d y_d
0 1 2.5 2.0 1.5 2.0 <-x_c, x_d aggregated mean
1 2 NaN 2.0 NaN 3.0