这是一个复杂的问题,我无法解决,我非常感谢您在这方面的帮助。
以下数据帧是根据Panda函数DataFrame.duplicated()
生成的,基于"Loc"(groupby(和"Category",重复记录相应地标记为True/False。
Number Loc Category Date IsDuplicate
-----------------------------------------------------
1 A jetski 01/01/2020 False
2 A kayak 01/02/2020 False
3 A jetski,kayak 01/04/2020 False
4 B jetski 01/05/2020 False
5 B jetski 01/07/2020 True
6 C kayak 01/08/2020 False
7 C kayak 01/09/2020 True
8 C jetski 01/10/2020 False
我的期望是基于"Loc"(groupby(、"Category"one_answers"IsDuplicate"创建另一列,以仅表示那些实际重复的值。只有虚假数据应标记为"不适用">
点数:
按位置分组
对于任何位置:
a。如果"IsDuplicate"==True,则匹配"category"col并仅返回匹配的行作为True/False
b。如果发现任何其他唯一的错误记录,则返回"不适用">
对于位置中的任何唯一False值,返回"不适用">
预期输出:
Number Loc Category Date IsDuplicate Only_Dupes
---------------------------------------------------------------------
1 A jetski 01/01/2020 False Not Applicable
2 A kayak 01/02/2020 False Not Applicable
3 A jetski,kayak 01/04/2020 False Not Applicable
4 B jetski 01/05/2020 False False
5 B jetski 01/07/2020 True True
6 C kayak 01/08/2020 False False
7 C kayak 01/09/2020 True True
8 C jetski 01/10/2020 False Not Applicable
如果需要更多的澄清,请告诉我。我感谢你的帮助。
您可以尝试创建两个条件,一个用于检查重复项,另一个用于获取按Loc和Category分组的列Category的出现次数,然后使用np.where
分配计数大于1的duplicated()
的结果,否则为Not Applicable
c1 = df.duplicated(['Loc','Category'])
c2 = df.groupby(['Loc','Category'])['Category'].transform('count').gt(1)
df['Only_Dupes'] = np.where(c2,c1,'Not Applicable')
或者类似的逻辑,但在转换中链接它们:
df['Only_Dupes'] = df.groupby(['Loc','Category'])['Category'].transform(lambda x:
np.where(x.count()>1,x.duplicated(),'Not Applicable'))
print(df)
Number Loc Category IsDuplicate Only_Dupes
0 1 A jetski False Not Applicable
1 2 A kayak False Not Applicable
2 3 A jetski,kayak False Not Applicable
3 4 B jetski False False
4 5 B jetski True True
5 6 C kayak False False
6 7 C kayak True True
7 8 C jetski False Not Applicable