Skip to main content
 首页 » 编程设计

python之Pandas 在列上旋转

2025年05月04日24tuyile006

我的 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 试过了。 pandas 有缺点吗?

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

请您参考如下方法:

使用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