【问题标题】:Matching two lists of nonequivalent length and appending matches to new list匹配两个长度不相等的列表并将匹配项附加到新列表
【发布时间】:2020-03-29 13:36:06
【问题描述】:

我有 2 个列表和一个 DF:印第安纳州邮政编码、俄亥俄邮政编码和礼品购买者邮政编码(数据框)。有 348 个印第安纳州邮政编码、227 个俄亥俄州邮政编码和 6,000 个购买者邮政编码(其中一些不是俄亥俄州或印第安纳州)

我想在购买者数据框中找到所有匹配的邮政编码,并查看是否与印第安纳州或俄亥俄州邮政编码列表中的任何邮政编码匹配,如果存在则将购买者列表的整行附加到相应的状态列表

purchaser_zip = purchasers['zip']
indiana_zip = indiana['zip']
ohio_zip = ohio['zip']

ohio_match = []
indiana_match = []

for i in purchaser_zip:
    if i == indiana_zip.any():
        indiana_match.append(i)

for i in purchaser_zip:
    if i == ohio_zip.any():
        ohio_match.append(i)

我会使用 join 方法,但这些列表的长度不等。而且我只返回一个空列表

【问题讨论】:

  • 那些看起来像系列,而不是列表,假设所有基础对象都是 pandas dfs。
  • indiana_zip.any() 只是检查是否有任何元素是非虚假的。由于它返回一个布尔值,它永远不会等于i,它不是一个布尔值。你的意思是(indiana_zip == i).any()
  • 你是对的。我没有填写列表,因为我正在将对象与整数进行比较。你也是对的,我正在查看布尔值并从购买者那里获取实际行

标签: python list dataframe append


【解决方案1】:

你可以使用isin:

indiana_match = purchasers[purchasers['zip'].isin(indiana_zip)]
ohio_match = purchasers[purchasers['zip'].isin(ohio_zip)]

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 2018-02-08
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多