用重复的列名重命名Pandas数据框中的列?

2024-06-16 10:46:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有重复名称的列的df X:

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

使用Pandas rename函数可以:

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

只给我两个名为Cost的列。

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


Tags: columns函数in名称pandasdfindex情况
3条回答

下面是一个动态解决方案:

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
X_R.columns = ['Retail','Cost']

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

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

相关问题 更多 >