【问题标题】:Comparing 2 dataframe columns to 2 numpy array values in the same row将 2 个数据框列与同一行中的 2 个 numpy 数组值进行比较
【发布时间】:2019-09-28 15:36:50
【问题描述】:

我有一个数据框。它包含df['article_id']df['user_id']。 我还有一个 numpy 数组(或一个列表。我认为 np 数组会更快)。其中包含一个 article_id 和一个 user_id。 关键是将 df 与 np 数组进行比较,这样我就可以过滤掉重复的条目。 user_id 和 article_id 都需要是相同的值。所以这个想法是:

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

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

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

期望的输出:

    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

我怎样才能做到这一点?

【问题讨论】:

  • 你能发布一个数据框、列表和所需输出的小样本吗?
  • @Vink 我添加了一些代码 sn-ps
  • @SomeName: 检查我的更新

标签: python pandas numpy dataframe jupyter-notebook


【解决方案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

【讨论】:

  • 它们的形状不同。我添加了代码 sn-p 它们的样子。 Df 还有 2 列。
猜你喜欢
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2012-08-21
  • 2018-03-14
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多