pandas pivot_table列名

hfyxw5xn  于 2023-08-01  发布在  其他
关注(0)|答案(3)|浏览(126)

对于这样的dataframe:

d = {'id': [1,1,1,2,2], 'Month':[1,2,3,1,3],'Value':[12,23,15,45,34], 'Cost':[124,214,1234,1324,234]}
df = pd.DataFrame(d)

     Cost  Month  Value  id  
0    124       1     12   1  
1    214       2     23   1  
2    1234      3     15   1  
3    1324      1     45   2  
4    234       3     34   2

字符串
我应用pivot_table

df2 =    pd.pivot_table(df, 
                        values=['Value','Cost'],
                        index=['id'],
                        columns=['Month'],
                        aggfunc=np.sum,
                        fill_value=0)


得到df 2:

Cost            Value          
Month     1    2     3     1   2   3   
id                                  
1       124  214  1234    12  23  15
2      1324    0   234    45   0  34


是否有一种简单的方法来格式化生成的 Dataframe 列名称,如

id     Cost1    Cost2     Cost3 Value1   Value2   Value3   
1       124      214      1234    12        23       15
2      1324       0       234     45         0       34


如果我这样做:

df2.columns =[s1 + str(s2) for (s1,s2) in df2.columns.tolist()]


我得到:

Cost1  Cost2  Cost3  Value1  Value2  Value3
id                                             
1     124    214   1234      12      23      15
2    1324      0    234      45       0      34


如何摆脱额外的水平?
谢谢!2谢谢!

kx1ctssn

kx1ctssn1#

使用@chrisb的答案中的线索,这正是我想要的:

df2.reset_index(inplace=True)

字符串
其给出:

id     Cost1    Cost2     Cost3 Value1   Value2   Value3   
1       124      214      1234    12        23       15
2      1324       0       234     45         0       34


在多个索引列的情况下,this post很好地解释了这一点。为了完整起见,下面是如何操作:

df2.columns = [' '.join(col).strip() for col in df2.columns.values]

zdwk9cvp

zdwk9cvp2#

'id'是索引名称,您可以将其设置为None以删除。

In [35]: df2.index.name = None

In [36]: df2
Out[36]: 
   Cost1  Cost2  Cost3  Value1  Value2  Value3
1    124    214   1234      12      23      15
2   1324      0    234      45       0      34

字符串

snvhrwxg

snvhrwxg3#

我不认为reset_index是正确的方法。如果df.columns.name是你试图删除的,也许你应该尝试:

df.columns.name = None

字符串

相关问题