将2个数据框列与同一行中的2个numpy数组值进行比较

时间:2019-05-10 17:42:52

标签: python pandas numpy dataframe jupyter-notebook

我有一个数据框。它包含FileManager.importFile(e, importScenarios, importDevices).catch(e => { // Some treatment of your exception }) df['article_id']。 我也有一个numpy数组(或一个列表。我认为np数组会更快)。其中包含一个article_id和一个user_id。 关键是将df与np数组进行比较,以便我可以过滤出重复的条目。 user_id和article_id都必须是相同的值。因此,想法是:

df['user_id']

这是df&np.array / list的外观(目前只有1个user_id,但以后还会更多)。因此,如果np.array包含与数据框相同的值,则应删除数据框行。:

if df['article_id'] == nparray[:,0] & df['user_id'] == nparray[:,1]:
    remove the row from the dataframe

所需的输出:

array([[1127087222,          1],
       [1202623831,          1],
       [1747352473,          1],
       [1748645480,          1],
       [1759957596,          1],
       [1811054956,          1]])

    user_id article_id  date_saved
0   1   2579244390  2019-05-09 10:46:23
1   1   2580336884  2019-05-09 10:46:22
2   1   1202623831  2019-05-09 10:46:20
3   1   2450784233  2019-01-11 12:36:44
4   1   1747352473  2019-01-03 21:38:34

我该如何实现?

1 个答案:

答案 0 :(得分:1)

在您澄清之后。您可以使用np.isin和否定运算符'〜'来实现所需的输出,如下所示:

df[~np.isin(df[['user_id', 'article_id']], nparray)]

Out[17]:
   user_id  article_id           date_saved
0        1  2579244390  2019-05-09 10:46:23
1        1  2580336884  2019-05-09 10:46:22
3        1  2450784233  2019-01-11 12:36:44