【问题标题】:Find if any value from a list exists anywhere in a dataframe查找列表中的任何值是否存在于数据框中的任何位置
【发布时间】:2021-07-04 20:00:56
【问题描述】:

我有一份具体的公司识别号码列表。 前任。公司 ID = ['1','2','3']

我有一个与公司业务相关的不同属性的数据框。 前任。 company_df

我的列表中的值可能包含多个列。 前任。 'company_number'、'company_value'、'job_referred_by'等

如何检查我的 companyID 列表中的任何值是否存在于我的 company_df 中,无论数据类型如何,并且只返回找到 companyID 的列?

这是我尝试过的,但没有运气:

def find_any(company_df, companyID):
    found = company_df.isin(companyID).any()
    foundCols = found.index[found].tolist()
    print(foundCols)

【问题讨论】:

    标签: python-3.x dataframe jupyter-notebook


    【解决方案1】:

    从您的 companyID 列表中创建一个 df,然后合并公司 ID 上的两个 df。然后过滤 df 以仅显示匹配的行。

    对于数据类型,您可以将 int 转换为 string 没有问题,但是如果您有一个无法转换为 int 的字符串(例如,'a'),则相反会崩溃,所以我会使用 string。

    这是一个玩具示例:

    company_df = pd.DataFrame({'co_id':  [1, 2, 4, 9]})
    
    company_df['co_id'] = company_df['co_id'].astype(str)
    
    companyID = ['1','2','3']
    df_companyID = pd.DataFrame(companyID, columns=['co_id'])
    
    company_df = company_df.merge(df_companyID, on='co_id', how='left', indicator=True)
    print(company_df)
    #   co_id     _merge
    # 0     1       both
    # 1     2       both
    # 2     4  left_only
    # 3     9  left_only
    
    company_df_hits_only = company_df[company_df['_merge'] == 'both']
    del company_df['_merge']
    del company_df_hits_only['_merge']
    
    print(company_df_hits_only)
    #   co_id
    # 0     1
    # 1     2
    

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 2019-11-02
      • 2018-10-08
      • 1970-01-01
      • 2019-08-27
      • 2017-08-09
      相关资源
      最近更新 更多