繁体   English   中英

检查每个列值是否存在于另一个 dataframe 列中,其中另一个列值是列 header

[英]Check if each column values exist in another dataframe column where another column value is the column header

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 中的现有 header
  2. 如果 df_emails 中存在 header,请在该 header 的相应列中搜索 df_companies['company']
  3. 如果找到公司,则在df_companies中添加一列并填写'1',如果没有填写'0'

例如:亚马逊公司在 company.xlsx 中有 To email hi@test.de。 在 email.xlsx 中存在 header hi@test.de 并且在列中也找到了亚马逊 - 所以它是“1”。

任何人都知道如何做到这一点?

这是一种方法。 df_emails转换为字典,并将 map 转换为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM