大熊猫在柱子上转动

时间:2017-03-07 13:57:34

标签: python csv pandas

我的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。大熊猫有缺点吗?

编辑:我有多列,因此我需要附加后缀/前缀

1 个答案:

答案 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
相关问题