熊猫如何确保唯一的标题/列值?

时间:2018-09-14 14:54:59

标签: python pandas

我有一个格式不正确的Pandas df,需要将标头/列值强制为原始df(具有重复值)的行之一。问题在于标题现在具有重复项,例如:

2.0, 2.0, 10.0, 10.0, ..., 10.0, 16.0, 16.0, 16.0, 21.0, 21.0, 21.0, ...

我想确保标题/列的值具有唯一的值,如下所示:

2.0, 2.1, 10.0, 10.1, 10.2, 10.3, ... , 10.8, 10.9, 16.0, 16.1, 16.2, .... 

,依此类推。

如果需要,新值可以超过X.9,如果我得到X.10, X.11, X.12, ....等对我来说没有关系。

我尝试使用df.columns = df.columns.unique(),但随后出现错误消息

  

“ ValueError:长度不匹配:预期轴有76个元素,新值有37个元素”。

我也查看了其他方法,例如df.duplicates()df.drop_duplicates(),但这些方法似乎都无法提供我所追求的目标。

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用cumcount

s=samepledf.columns.to_series()
samepledf.columns=s.astype(int).astype(str)+'.'+s.groupby(s).cumcount().astype(str)

samepledf
Out[199]: 
   2.0   2.1   10.0  10.1
0     1     1     1     1
1     1     1     1     1
2     1     1     1     1
3     1     1     1     1

数据样本

samepledf=pd.DataFrame(data=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],columns=[2.0, 2.0, 10.0, 10.0])
samepledf
Out[192]: 
   2.0   2.0   10.0  10.0
0     1     1     1     1
1     1     1     1     1
2     1     1     1     1
3     1     1     1     1

答案 1 :(得分:0)

分配给列仅用于重命名。如果您只想对列进行子集化并且知道可以使用重复命名的列中的任何一个,请执行以下操作:

df = df[df.columns.unique()] 

答案 2 :(得分:0)

您可以使用以下内容:

l = [10,10,10,18,18,19,20,21,19,20]
fin=[];d={}
for i in l:
    if d.get(i):
        d[i] = d[i]+0.1
    else:
        d[i] = 0.1
    fin.append(i+d[i])
df.columns = fin