Pandas 仅当满足布尔值/特定值时,才删除重复项

Pandas 仅当满足布尔值/特定值时,才删除重复项,pandas,Pandas,我只想在某些值为true时删除行。特别是在我的例子中,我只想删除Holiday=True且名称和日期匹配的重复行。希望这能给你一个关于我的想法(显然不起作用) 尝试: mask=df['holiday'] df=pd.concat([ df.loc[mask]。删除重复项(子集=['name','date',keep='first'), df.loc[~掩码], ]) (1) 将整个数据框按列holiday (2) 重复数据消除一部分,保持另一部分不变 (3) 连接两个部分尝试: mask=d

我只想在某些值为true时删除行。特别是在我的例子中,我只想删除Holiday=True且名称和日期匹配的重复行。希望这能给你一个关于我的想法(显然不起作用)

尝试:

mask=df['holiday']
df=pd.concat([
df.loc[mask]。删除重复项(子集=['name','date',keep='first'),
df.loc[~掩码],
])
(1) 将整个数据框按列
holiday

(2) 重复数据消除一部分,保持另一部分不变

(3) 连接两个部分

尝试:

mask=df['holiday']
df=pd.concat([
df.loc[mask]。删除重复项(子集=['name','date',keep='first'),
df.loc[~掩码],
])
(1) 将整个数据框按列
holiday

(2) 重复数据消除一部分,保持另一部分不变

(3) 连接两个部分

您可以使用:

输出

   name        date  holiday       subject
1  mary  11-26-2020     True  Thanksgiving
2  jake  11-01-2020    False       Meeting
3  jake  11-01-2020    False       Meeting
4  andy  11-08-2020    False       Project
您可以使用:

输出

   name        date  holiday       subject
1  mary  11-26-2020     True  Thanksgiving
2  jake  11-01-2020    False       Meeting
3  jake  11-01-2020    False       Meeting
4  andy  11-08-2020    False       Project

工作得很有魅力。非常感谢。我这里有一个问题:为什么你的方法只有在假期是真的情况下才会被复制?没有提到这件事。我不明白它是怎么工作的。谢谢因为它只应用于
。drop_duplicates(…)
仅在
holiday==True
的部分(这是通过第一个
.loc[…]
实现的,它只过滤
holiday==True
的记录),第二个
。loc[…]
添加带有
holiday==False
的片段。非常感谢。我这里有一个问题:为什么你的方法只有在假期是真的情况下才会被复制?没有提到这件事。我不明白它是怎么工作的。谢谢因为它只应用于
.drop_duplicates(…)
仅在
假日==True
的部分(这是通过第一个
.loc[…]
实现的,它只过滤
假日==True
的记录),第二个
.loc[…]
添加带有
假日==False
的片段
0  mary  11-26-2020    True  Thanksgiving
1  jake  11-01-2020   False       Meeting
2  jake  11-01-2020   False       Meeting
3  andy  11-08-2020   False       Project
mask = df.duplicated(['name', 'date'], keep='last') & df['holiday']
print(df[~mask])
   name        date  holiday       subject
1  mary  11-26-2020     True  Thanksgiving
2  jake  11-01-2020    False       Meeting
3  jake  11-01-2020    False       Meeting
4  andy  11-08-2020    False       Project