我有一个 DataFrame
,其中列值的组合标识一个唯一地址(A、B、C)。我想识别所有此类行并为它们分配一个唯一标识符,我会根据地址递增该标识符。
例如
A B C D E
0 1 1 0 1
0 1 2 0 1
0 1 1 1 1
0 1 3 0 1
0 1 2 1 0
0 1 1 2 1
我想生成以下内容
A B C D E ID
0 1 1 0 1 0
0 1 2 0 1 1
0 1 1 1 1 0
0 1 3 0 1 2
0 1 2 1 0 1
0 1 1 2 1 0
我尝试了以下方法:
id = 0
def set_id(df):
global id
df['ID'] = id
id += 1
df.groupby(['A','B','C']).transform(set_id)
这将返回一个 NULL 数据框......这绝对不是这样做的方式......我是 Pandas 的新手。上面实际上应该使用 df[['A','B','C']].drop_duplicates()
来获取所有唯一值谢谢。
我想这就是你需要的:
df2 = df[['A','B','C']].drop_duplicates() #get unique values of ABC
df2 = df2.reset_index(drop = True).reset_index() #reset index to create a column named index
df2=df2.rename(columns = {'index':'ID'}) #rename index to ID
df = pd.merge(df,df2,on = ['A','B','C'],how = 'left') #append ID column with merge
我是一名优秀的程序员,十分优秀!