【问题标题】:Check if each column values exist in another dataframe column where another column value is the column header检查每个列值是否存在于另一个数据框列中,其中另一个列值是列标题
【发布时间】:2022-01-24 22:13:34
【问题描述】:
companies.xlsx

    company     To
1   amazon      hi@test.de
2   google      bye@test.com 
3   amazon      hi@tld.com
4   starbucks   hi@test.de
5   greyhound   bye@tuz.de

emails.xlsx

   hi@test.de   bye@test.com    hi@tld.com   ...
1  amazon       google          microsoft
2  starbucks    amazon          tesla
3  Grey Hound   greyhound       
4  ferrari

所以我有上面的 2 个 excel 表并阅读了两个 em:

file1 = pd.ExcelFile('data/companies.xlsx')
file2 = pd.ExcelFile('data/emails.xlsx')

df_companies = file1.parse('sheet1')
df_emails = file2.parse('sheet1')

我想要完成的是:

  1. 检查 df_companies['To'] 是否是 df_emails 中的现有标头
  2. 如果标题存在于 df_emails 中,请在该标题的相应列中搜索 df_companies['company']
  3. 如果找到公司,则在df_companies中添加一列并填写'1',如果没有填写'0'

例如:亚马逊公司在 company.xlsx 中有收件人电子邮件 hi@test.de。在 email.xlsx 中,标题 hi@test.de 存在,并且在列中也找到了 amazon - 所以它是“1”。

有人知道怎么做吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这是一种方法。将df_emails 转换为字典并将其映射到df_companies。然后,将映射的列与df_companies['company'] 进行比较。

    df_companies['check'] = df_companies['To'].map(df_emails.to_dict(orient='list')).fillna('')
    df_companies['check'] = df_companies.apply(lambda x: x['company'] in x['check'], axis=1).astype(int)
    
         company            To  check
    1     amazon    hi@test.de      1
    2     google  bye@test.com      1
    3     amazon    hi@tld.com      0
    4  starbucks    hi@test.de      1
    5  greyhound    bye@tuz.de      0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2022-01-18
      • 2019-12-11
      • 2021-09-06
      相关资源
      最近更新 更多