python - 如何使用 pandas 根据某些条件或函数匹配来自不同数据帧的值?

标签 python pandas match conditional-statements

假设我有两个数据框,如下所示。

raw_data = {
    'name': ['Jason love you', 'Molly hope wish care', 'happy birthday', 'dog cat', 'tiger legend bird'],
    'nationality': ['USA', 'USA', 'France', 'UK', 'UK']
}

raw_data_2 = {
    'name_2': ['Jason you', 'Molly care wist', 'hapy birthday', 'dog', 'tiger bird'],
    'nationality': ['USA', 'USA', 'France', 'UK', 'JK'],
    'code': ['a', 'b','c','d','e']
}

df1 = pd.DataFrame(raw_data, columns = ['name', 'nationality'])
df2 = pd.DataFrame(raw_data_2, columns = ['name_2', 'nationality', 'code'])

我想要做的是根据某些条件匹配两个数据帧。 这里的条件是

  1. 如果 raw_data_2 中存在一个名称,当这两个名称被空格分隔时,该名称是 raw_data_1 中的值(名称)的子集,并且
  2. 国籍应相同。

为了更容易理解,这里有一个示例:来自 raw_data_2'Jason You'.split(' ') = ['Jason', 'You'],所以这个是 'Jason Love You'.split(' ') = ['Jason', 'Love', 'You'] 的子集。 但是 'Molly care wist'.split(' ') 不是 'Molly care Wish'.split(' ') 的子集,因为后者不涵盖前者完全地(完美地)。 raw_data_2 中的 'tigerbird'.split(' ')'tiger legendbird'.split(' ') 的子集,但是他们的国籍不同。

如果我们满足上述条件,那么最后我想分配 raw_data_2 中的 code 值。 因此,所需的输出(让我们只使用代码)将是这样的:

'a'(matched), Nan(unmatched), Nan(unmatched), 'd', Nan(unmatched)

如何使用 pandas 来做到这一点?我想这不仅仅是“isin”函数或“map”函数那么简单。

最佳答案

使用<=测试子集的运算符

name = df1.name.str.split().apply(set)
name2 = df2.name_2.str.split().apply(set)
cond1 = name2 <= name
cond2 = df1.nationality == df2.nationality

pd.concat([df1, df2], axis=1, keys=['df1', 'df2']).loc[cond1 & cond2]

              df1                    df2                 
             name nationality     name_2 nationality code
0  Jason love you         USA  Jason you         USA    a
3         dog cat          UK        dog          UK    d

关于python - 如何使用 pandas 根据某些条件或函数匹配来自不同数据帧的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648768/

相关文章:

python - Django 在 OS X Mavericks 上找不到 libssl

python - 在 python 2.6.4 中安装 SUDS

python - 输入 'n' 时无法打印最终语句

python - 基于变量的绘图背景形状

Python/Pandas - 用另一个数据框中的值替换一个数据框中的元素

C++ 错误 : no matching function for call to 'regex_match()'

python - 如何在 travis 上使用 osx 环境构建 python 项目

python - 根据多列条目过滤行

c - Rust 的 "match"和 C 的 "switch"一样快吗?

PHP MySQL 使用标签显示相关项目