gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:14 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com