Python Pandas标记除一个特定重复行之外的所有行

时间:2017-03-30 17:46:55

标签: python pandas

我有一个Pandas数据帧,它已经被简化为仅重复并排序。 重复项由“HASH”列标识,然后按“HASH”和“SIZE”

排序
df_out['is_duplicated'] = df.duplicated(['HASH'], keep=False) #keep=False: mark all duplicates as true
df_out = df_out.ix[(df_out['is_duplicated'] == True)] #Keep only duplicate records
df_out = df_out.sort_values(['HASH', 'SIZE'], ascending=[True, False]) #Sort by "HASH", then by "SIZE"

结果:

HASH  SIZE  is_duplicated
1      5     TRUE
1      3     TRUE
1      2     TRUE
9      7     TRUE
9      5     TRUE

我想再添加2列。 第一列将通过ID识别具有相同“HASH”的数据行。 具有相同“HASH”的第一组行将是1,下一组将是2,等等......

第二列将标记每组中具有最大“SIZE”

的单行
HASH  SIZE ID   KEEP
1      5   1    TRUE
1      3   1    FALSE
1      2   1    FALSE
9      7   2    TRUE
9      5   2    FALSE

1 个答案:

答案 0 :(得分:1)

也许使用dicts和list comprehension:

import pandas as pd
df = pd.DataFrame([[1,1,1,9,9],[5,3,2,7,5]]).T
df.columns = ['HASH','SIZE']

hash_dict = dict(zip(df.HASH.unique(),range(1,df.HASH.nunique()+1)))
df['ID'] = [hash_dict[k] for k in df.HASH]

max_dict = dict(df.groupby('HASH')['SIZE'].max())
df['KEEP'] = [True if b==max_dict[a] else False for a,b in zip(df.HASH,df.SIZE)]