Skip to main content
 首页 » 编程设计

python Pandas : Rename columns after pivoting

2025年05月04日21jillzhang

我有一个旋转的 pandas 数据框。我不知道如何更改列名,以便我可以以自然的方式继续使用透视数据框。下面是一个最小的工作示例。

df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 
                            'two'], 
                    'bar': ['A', 'B', 'C', 'A', 'B', 'C'], 
                    'baz': [1, 2, 3, 4, 5, 6], 
                    'zoo': ['x', 'y', 'z', 'q', 'w', 't']}) 

旋转后

df.pivot(index='foo', columns='bar', values=['baz', 'zoo']) 

输出是:

      baz       zoo 
bar   A  B  C   A  B  C 
foo 
one   1  2  3   x  y  z 
two   4  5  6   q  w  t 

为了获得以下输出,接下来的步骤是什么?

   A_baz  B_baz  C_baz   A_zoo  B_zoo  C_zoo 
 
one   1    2       3       x      y      z 
two   4    5       6       q      w      t 

非常感谢!

请您参考如下方法:

将 f-string 与列表推导一起使用:

#python 3.6+ 
df.columns = [f'{j}_{i}' for i, j in df.columns] 
#lower python versions 
#df.columns = ['{}_{}'.format(j, i) for i, j in df.columns] 
print (df) 
    A_baz B_baz C_baz A_zoo B_zoo C_zoo 
foo                                     
one     1     2     3     x     y     z 
two     4     5     6     q     w     t 

或DataFrame.swaplevel使用 map 和 join:

df = df.pivot(index='foo', columns='bar', values=['baz', 'zoo']).swaplevel(0,1,axis=1) 
 
df.columns = df.columns.map('_'.join) 
print (df) 
    A_baz B_baz C_baz A_zoo B_zoo C_zoo 
foo                                     
one     1     2     3     x     y     z 
two     4     5     6     q     w     t