我有一个大熊猫数据框,其中包含有关曲目的信息以及它们的匹配方式。有很多列,但我想根据这些列删除行:
ID Hard_Match Soft_Match
75 205487000 False True
91 205487000 False True
47 205487000 True False
0 209845000 True False
62 210842000 True False
81 212085000 False True
96 229132000 False False
90 229550000 False False
66 229758000 True False
如果想要删除"软匹配"行如果存在"硬匹配"具有相同ID的行:
for each row in dataframe:
if row[hardmatched] == True somewhere else:
remove row
else:
keep row
因此,在上面的示例中,205487000将在索引91和75中删除,并保留在索引47中。
答案 0 :(得分:0)
IIUC然后以下做你想做的事:
In [112]:
ids = df.loc[df['Soft_Match'] == True, 'ID'].unique()
ids
Out[112]:
array([205487000, 212085000], dtype=int64)
In [113]:
hard_matches = df.loc[(df['Hard_Match'] == True) & df['ID'].isin(ids), 'ID']
hard_matches
Out[113]:
47 205487000
Name: ID, dtype: int64
In [116]:
df.loc[~((df['ID'].isin(hard_matches)) & (df['Hard_Match'] == False))]
Out[116]:
ID Hard_Match Soft_Match
47 205487000 True False
0 209845000 True False
62 210842000 True False
81 212085000 False True
96 229132000 False False
90 229550000 False False
66 229758000 True False
因此,首先查找“Soft_Match”为True
时的ID,然后我们找到“Hard_Match”为True
的位置以及ID与这些ID匹配的位置,然后我们过滤掉这些行ID匹配的位置和'Hard_Match'为False