熊猫数据框选择基于其他数据框的列包含其中的列值

时间:2021-03-05 03:49:04

标签: python pandas mask isin

我有两个数据框。这是dwpjp.head()

<头>
jp_number
0 25146315052147720191
1 57225427599900052634
2 86076681691411639833
3 50491824499499656478
4 95588382889227620465

ct_data.head()

<头>
imjp_number imct_id
0 23605308039805192764 x1E5e3ukRyEFRT6SUAF6lg|d543d3d064da465b8576d87
1 57225427599900052634 aa0d2dac654d4154bf7c09f73faeaf62|-vf6738ee3bed
2 53733358271401869469 6FfHZRoiWs2VO02Pruk07A|__g3d877adf9d154637be26
3 50491824499499656478 __gbe204670ca784a01b7207b42a7e5a5d3|54e2c39cd3
4 82143248133286027306 __g1114a30c6ea548a2a83d5a51718ff0fd|773840905c

我想要来自 cct_data 的两个新数据框 dct_datact_data。如果 ct_data 存在于 jp_number 数据帧中,则 dwbjp 数据帧应该被拆分,然后放入 cct_data,否则放入 dct_data

我为 jp_number 中常见的 dwpjp 尝试了这个:

cct_data = ct_data[ct_data.isin(dwpjp).any(1).values]

对于另一个我否定条件如下:

dct_data = ct_data[~[ct_data.isin(dwpjp).any(1).values]]

但结果没有如下所示。

cct_data

<头>
imjp_number imct_id
0 57225427599900052634 aa0d2dac654d4154bf7c09f73faeaf62|-vf6738ee3bed
1 50491824499499656478 __gbe204670ca784a01b7207b42a7e5a5d3|54e2c39cd3

dct_data

<头>
imjp_number imct_id
0 23605308039805192764 x1E5e3ukRyEFRT6SUAF6lg|d543d3d064da465b8576d87
1 53733358271401869469 6FfHZRoiWs2VO02Pruk07A|__g3d877adf9d154637be26
2 82143248133286027306 __g1114a30c6ea548a2a83d5a51718ff0fd|773840905c

注意:jpnumber=imjp_number

2 个答案:

答案 0 :(得分:3)

注意以下几点:

  1. isin 想要值,但它获得了整个数据框:将 .isin(dwpjp) 更改为 .isin(dwpjp.jp_number)
  2. 在预先编辑的问题中,dwpjp 的每一行实际上是一个列表,其中包含 1 个值,而不仅仅是 1 个值。如果确实如此,那么 .isin(dwpjp.jp_number) 实际上还需要一个步骤:将值分解为 .isin(dwpjp.jp_number.explode())
  3. 您的否定被错误地应用于列表:将 ~[ct_data...] 更改为 ~ct_data...

通过这些修复,它对我有用:

cct_data = ct_data[ct_data.isin(dwpjp.jp_number.explode()).any(1).values]
<头>
imjp_number imct_id
1 57225427599900052634 aa0d2dac654d4154bf7c09f73faeaf62|-vf6738ee3bed
3 50491824499499656478 __gbe204670ca784a01b7207b42a7e5a5d3|54e2c39cd3
dct_data = ct_data[~ct_data.isin(dwpjp.jp_number.explode()).any(1).values]
<头>
imjp_number imct_id
0 23605308039805192764 x1E5e3ukRyEFRT6SUAF6lg|d543d3d064da465b8576d87
2 53733358271401869469 6FfHZRoiWs2VO02Pruk07A|__g3d877adf9d154637be26
4 82143248133286027306 __g1114a30c6ea548a2a83d5a51718ff0fd|773840905c

答案 1 :(得分:0)

修改你的公式如下

cct_data = ct_data[ct_data.imjp_number.isin(dwpjp.jp_number)]

dct_data = ct_data[~ct_data.imjp_number.isin(dwpjp.jp_number)]