在Pandas DataFrame中拥有唯一的索引值

6

我希望拥有一个唯一的索引值,而不是重复多次相同的值。

例如:我有这个数据框:

test = pd.DataFrame({'id': ['a','a','a','a','b'],
                     'col_1': [1,2,3,4,5],
                     'col_2': [6,7,8,9,10]
                     })

  id  col_1  col_2
0  a  1      6    
1  a  2      7    
2  a  3      8    
3  a  4      9    
4  b  5      10  

我想要实现的目标是将id列作为索引,且不重复。我尝试过以下方法,但是您可以看到,每一行中都重复了索引:

test.set_index('id')

    col_1  col_2
id              
a   1      6    
a   2      7    
a   3      8    
a   4      9    
b   5      10  

我想要实现的是这样的目标(为所有包含4个值的组使用索引'a'等):

    col_1  col_2
id              
a   1      6    
    2      7    
    3      8    
    4      9    
b   5      10  

你有任何实现这个的想法吗? 提前谢谢。

2个回答

7

您可以将id列设置为索引。为避免重复的索引条目,还需将该索引设置为结果MultiIndex的第二级。

test.set_index(['id', test.index])

# Out:
      col_1  col_2
id                
a  0      1      6
   1      2      7
   2      3      8
   3      4      9
b  4      5     10

如果您真的不想要非重复的索引级别,只需将id设置为索引即可。但请注意,在这种情况下,pandas显示格式将包括重复项:

test.set_index('id')
# Out: 
    col_1  col_2
id              
a       1      6
a       2      7
a       3      8
a       4      9
b       5     10

test.set_index('id').index.duplicated().any() 也将返回 True,这通常会导致包含重复索引的索引不够优化。


1
如果希望将重复的值替换为''以便显示,但更好的方法是使用重复的索引值,以便后续处理:
df = test.set_index('id')

df1 = df.set_index(df.index.where(~df.index.duplicated(), ''))
print (df1)
    col_1  col_2
id              
a       1      6
        2      7
        3      8
        4      9
b       5     10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接