我正在尝试为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
答案 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