【问题标题】:Pandas dataframe select Columns based on other dataframe contains column value in itPandas 数据框选择基于其他数据框的列,其中包含列值
【发布时间】:2021-03-05 03:49:04
【问题描述】:

我有两个数据框。这里是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

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

我在dwpjp 中的常见jp_number 上试过这个:

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.

【问题讨论】:

    标签: python pandas mask isin


    【解决方案1】:

    修改你的公式如下

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

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

    【讨论】:

    • 这个方法耗时太长,ct_data有50条记录,dwpjp有350万条记录,有更快的方法吗?
    • 它可以通过cct_data = pd.merge(dwpjp, ct_data, on='jp_number', how='inner') 快速计算,假设两个数据框都具有 jp_number 作为通常的标题列名称
    • Ramanai 我得到 TypeError: unhashable type: 'list' error
    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多