如何在同一列上传递同一索引以在另一列上传递重复对?

时间:2019-06-12 10:59:29

标签: python-3.x pandas numpy

我正在尝试为Dataframe上的重复值提供相同的索引。请注意,索引必须在列上

我设法找到了重复项及其在数据框中的位置。我不知道如何在找到的重复对上设置值。

def double_finder(dataframe, where: str):
    new_index = 10000 #new index start 
    df = dataframe[where]
    new_list = df.values.tolist()

    d = pd.DataFrame({"data": new_list})
    f = d.groupby("data").groups # this creates a dict class with the values 
                                 # of the Dataframe and their position 
                                 # on the Dataframe

所以new list的格式为['a-4', 'b-210', 'a-4', 'z-b', 'c-a', 'b-210']f的结果看起来像这样的"a-4": Int64Index: [0 , 2], "b-210": Int64Index: [1, 4], "z-b": Int64Index: [3]等。

我想在我的最终Dataframe上实现以下目标: index_col, data 0, a-4 1, b-210 0, a-4 2, z-b 3, c-a 1, b-210

1 个答案:

答案 0 :(得分:1)

使用factorize并分配给index

new_list = ['a-4', 'b-210', 'a-4', 'z-b', 'c-a', 'b-210']
d = pd.DataFrame({"data": new_list})
d.index = pd.factorize(d['data'])[0]
print (d)
    data
0    a-4
1  b-210
0    a-4
2    z-b
3    c-a
1  b-210

如果需要新列:

new_list = ['a-4', 'b-210', 'a-4', 'z-b', 'c-a', 'b-210']
d = pd.DataFrame({'new':pd.factorize(new_list)[0] ,"data": new_list})
print (d)
   new   data
0    0    a-4
1    1  b-210
2    0    a-4
3    2    z-b
4    3    c-a
5    1  b-210