2016-11-23 137 views
0

我有一个DF X与重复名称的列:重命名具有重复列名称的Pandas数据框中的列?

In [77]: X_R 
Out[77]: 
     dollars dollars 
    0 0.7085 0.5000 

我想重新命名它让我有:

In [77]: X_R 
Out[77]: 
     Retail Cost 
    0 0.7085 0.5000 

使用熊猫重命名功能做的工作:

X_R.rename(index=str, columns={"dollars": "Retail", "dollars": "Cost"}) 

只给了我两列名为成本。

如何在这种情况下重命名列?

+0

'X_R.columns = [ '零售', '费用'] '? – MaxU

回答

2
X_R.columns = ['Retail','Cost'] 
2

这里是一个动态的解决方案:

In [59]: df 
Out[59]: 
    a x x x z 
0 6 2 7 7 8 
1 6 6 3 1 1 
2 6 6 7 5 6 
3 8 3 6 1 8 
4 5 7 5 3 0 

In [60]: d 
Out[60]: {'x': ['x1', 'x2', 'x3']} 

In [61]: df.rename(columns=lambda c: d[c].pop(0) if c in d.keys() else c) 
Out[61]: 
    a x1 x2 x3 z 
0 6 2 7 7 8 
1 6 6 3 1 1 
2 6 6 7 5 6 
3 8 3 6 1 8 
4 5 7 5 3 0 
1

这里是另一个动态的解决方案,我认为是更好

In [59]: df 
Out[59]: 
    a x x x z 
0 6 2 7 7 8 
1 6 6 3 1 1 
2 6 6 7 5 6 
3 8 3 6 1 8 
4 5 7 5 3 0 
In [61]: class renamer(): 
      def __init__(self): 
        self.d = dict() 

       def __call__(self, x): 
        if x not in self.d: 
         self.d[x] = 0 
         return x 
        else: 
         self.d[x] += 1 
         return "%s_%d" % (x, self.d[x]) 

      df.rename(columns=renamer()) 
Out[61]: 
    a x x_1 x_2 z 
0 6 2 7 7 8 
1 6 6 3 1 1 
2 6 6 7 5 6 
3 8 3 6 1 8 
4 5 7 5 3 0