2 回答

TA贡献1801条经验 获得超16个赞
我所做的是将 ID 列转换为列表,手动创建 ID_Index,然后将其附加到数据帧
ids=df_pandas['ID'].tolist()
counter=1
id_index=[1]
for idx,id in enumerate(ids):
if idx!=0:
if ids[idx-1]!=id:
counter+=1
id_index.append(counter)
df_pandas['ID_Index']=id_index
确定这可能不是完美的方式,但可以完成工作

TA贡献1794条经验 获得超7个赞
factorize如果想要相同的值,我认为需要:
df['new'] = pd.factorize(df['ID'])[0] + 1
或者,如果可能,多个组:
df['new'] = df['ID'].ne(df['ID'].shift()).cumsum()
print (df)
ID Values new
0 'AAAA' 1 1
1 'AAAA' 2 1
2 'AAAA' 3 1
3 'BBBB' 4 2
4 'CCCC' 5 3
5 'CCCC' 6 3
在添加的新行中最能看出差异:
df['new1'] = pd.factorize(df['ID'])[0] + 1
df['new2'] = df['ID'].ne(df['ID'].shift()).cumsum()
print (df)
ID Values new1 new2
0 'AAAA' 1 1 1
1 'AAAA' 2 1 1
2 'AAAA' 3 1 1
3 'BBBB' 4 2 2
4 'CCCC' 5 3 3
5 'CCCC' 6 3 3
6 'AAAA' 7 1 4
添加回答
举报