在数据框行中查找唯一的ID

输入-具有超过5万行的数据框。

预期结果:通过多列查找唯一的ID。

F.e。有数据框:

id par1 par2 par3
1  a    1    AA
2  b    2    AB
3  c    3    AC
4  a    4    AD
5  d    3    AE
6  e    5    AD
7  d    1    AF

因此,逻辑是,如果任何行共享公共参数(即相同的唯一ID),则结果应该是这样的,由迭代生成: 首先是par1:

id par1 par2 par3  uniq_id
1  a    1    AA    1
2  b    2    AB    2
3  c    3    AC    3
4  a    4    AD    1
5  d    3    AE    4   
6  e    5    AD    5 
7  d    1    AF    4

然后通过par2:

id par1 par2 par3  uniq_id
1  a    1    AA    1
2  b    2    AB    2
3  c    3    AC    3
4  a    4    AD    1
5  d    3    AE    3   
6  e    5    AD    5 
7  d    1    AF    1

然后通过par3:

id par1 par2 par3  uniq_id
1  a    1    AA    1
2  b    2    AB    2
3  c    3    AC    3
4  a    4    AD    1
5  d    3    AE    3   
6  e    5    AD    1 
7  d    1    AF    1

然后应检查是否仍然存在误导: f.e. id=5id=3应该得到uniq_id = 1,因为—id = 7 is uniq_id = 1 and id = 7 share par1 {{1} } id = 5 with id = 3`也会更改。

我希望我能解释清楚。 目前,我唯一可行的解​​决方案-创建,and because of that周期并手动比较值,但是由于有很多观察结果,因此可能要花很多时间才能执行。

wz5529885 回答:在数据框行中查找唯一的ID

首先使用factorize,然后将Series.mapDataFrame.drop_duplicates一起使用:

df['uniq_id'] = pd.factorize(df['par1'])[0] + 1
df['uniq_id'] = df['par2'].map(df.drop_duplicates('par2').set_index('par2')['uniq_id'])
df['uniq_id'] = df['par3'].map(df.drop_duplicates('par3').set_index('par3')['uniq_id'])
print (df)
   id par1  par2 par3  uniq_id
0   1    a     1   AA        1
1   2    b     2   AB        2
2   3    c     3   AC        3
3   4    a     4   AD        1
4   5    d     3   AE        3
5   6    e     5   AD        1
6   7    d     1   AF        1

如果可能,可以创建更多列:

df['uniq_id'] = pd.factorize(df['par1'])[0] + 1

for col in ['par2','par3']:
    df['uniq_id'] = df[col].map(df.drop_duplicates(col).set_index(col)['uniq_id'])
本文链接:https://www.f2er.com/3138181.html

大家都在问