I have a df X with columns with duplicate names:
我有一个带有重复名称的列的df X:
In [77]: X_R
Out[77]:
dollars dollars
0 0.7085 0.5000
I want to rename it so that I have:
我想重命名它,以便我有:
In [77]: X_R
Out[77]:
Retail Cost
0 0.7085 0.5000
Using the Pandas rename function does' work:
使用Pandas重命名功能确实有效:
X_R.rename(index=str, columns={"dollars": "Retail", "dollars": "Cost"})
Just gives me two columns named Cost.
给我两个名为Cost的列。
How can I rename the columns in this case?
在这种情况下如何重命名列?
3 个解决方案
#1
4
X_R.columns = ['Retail','Cost']
#2
6
Here is a dynamic solution:
这是一个动态的解决方案:
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
#3
3
Here is another dynamic solution that I think is nicer
这是另一个我认为更好的动态解决方案
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
#1
4
X_R.columns = ['Retail','Cost']
#2
6
Here is a dynamic solution:
这是一个动态的解决方案:
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
#3
3
Here is another dynamic solution that I think is nicer
这是另一个我认为更好的动态解决方案
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