简体   繁体   English

熊猫立柱

[英]Pandas pivot on column

my CSV looks like: 我的CSV看起来像:

"a","b","c","d"
1, "x", 1, 1
1, "y", 2, 2

and I want to convert it based on column "b" to 我想根据“ b”列将其转换为

"a", "x_c", "y_c", "x_d", "y_d"
1, 1, 2, 1, 2

I've tried it with pivot and unstack. 我已经尝试过枢轴和拆堆。 Is there a shortcome in pandas ? 熊猫有缺点吗?

EDIT: I have multiple columns therefore I need to append a suffix/prefix 编辑:我有多个列,因此我需要附加一个后缀/前缀

Use pivot_table : 使用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

Also if duplicates, then aggfunc is applied: 同样,如果重复,则应用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM