假设我有两个数据帧,如下所示。
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'])
我想要做的是根据某些条件匹配两个数据帧。 这里的条件是
raw_data_2
的名称是raw_data_1
的值(名称)的子集,当这两个名称按空格分割时,为了便于理解,这里有一个示例:来自raw_data_2
,'Jason You'.split(' ') = ['Jason', 'You']
,因此这是'Jason Love You'.split(' ') = ['Jason', 'Love', 'You']
的子集。
但'Molly care wist'.split(' ')
不是'Molly care wish'.split(' ')
的子集,因为后者并不完全覆盖前者(完美)。
来自'tiger bird'.split(' ')
的{{1}}是raw_data_2
的子集,但他们的国籍不同。
如果我们符合上述条件,那么最后我想从'tiger legend bird'.split(' ')
分配code
值。
所以期望的输出(让我们只需要raw_data_2
)就像:
code
如何使用熊猫来做到这一点?我想这不仅仅是因为' isin'功能或' map'功能
答案 0 :(得分:1)
使用<=
运算符测试子集
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