如果行元素包含在另一个行元素中,请选择 pandas 行



我有一个熊猫数据帧,看起来像这样:

real_value, prediction
'invalid', 'inv'
'invalid', 'neg'
'invalid', 'inv'
'negative', 'neg'
'negative', 'neg'
'negative', 'neg'
'positive', 'pos'
'positive', 'pos'
'positive', 'inv'

我想选择预测和实际值不匹配的所有行,换句话说,我想得到一个如下所示的数据帧

real_value, prediction
'invalid', 'neg'
'positive', 'inv'

我试过df.loc[~df.prediction.isin(df.real_value)],但这不起作用。根据特定的用户定义值轻松选择,例如df.loc[~df.prediction.isin(['neg'])],但我找不到根据行本身中出现的值进行选择的方法。

如何获得所需的选择?谢谢

使用以下条件:

df[df['real_value'].str[:3].ne(df['prediction'])]

输出:

real_value  prediction
1   invalid     neg
8   positive    inv

ne返回不等于系列和其他。这是从元素上讲的。不能使用isin,因为这需要可迭代的序列、数据帧或字典,因此您不会按元素real_valueprediction比较列。

我希望这有所帮助。

这也应该有所帮助。熊猫软包装纸

df.loc[(df.real_value != df.prediction.astype(str).str[:3])]

这可能更整洁,并且基于@WenYoBen的评论:

df[df.Prediction.str[:3].ne(df.real_value)]

您也可以使用掩码列来执行此操作,如果您的预测长度并不总是相同(这是其他答案的假设(,则掩码列会更灵活一些:

df['mask'] = [x[1] in x[0] for x in zip(df['real_value'], df['prediction'])]
print(df.loc[df['mask'] == False].drop('mask', axis=1))

返回:

real_value  prediction
1    invalid         neg  
8   positive         inv

最新更新