如果df['col']='a','b','c'和df2['col']='a123','b456','d789'我如何创建df2['is_contained']='a','b','no_match',如果从值,其中df['col']来自值范围内被发现df2['col']的df['col']返回值,如果没有发现匹配,“NO_MATCH”返回?此外,我不希望有多个匹配项,但在不太可能的情况下,我想返回一个像“多个匹配项”这样的字符串。
有了这个玩具数据集,我们想添加一个新列,df2其中将包含no_match前三行,最后一行将包含值,'d'因为该行的col值(字母'a')出现在 df1 中。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.DataFrame({'col': ['a', 'b', 'c', 'd']})
df2 = pd.DataFrame({'col': ['a123','b456','d789', 'a']})
Run Code Online (Sandbox Code Playgroud)
换句话说,从值df1应采用填充这个新列df2只有当行的df2['col']值出现在某处df1['col']。
In [2]: df1
Out[2]:
col
0 a
1 b
2 c
3 d
In [3]: df2
Out[3]:
col
0 a123
1 b456
2 d789
3 a
Run Code Online (Sandbox Code Playgroud)
如果这是理解您的问题的正确方法,那么您可以使用 pandas 执行此操作isin:
In [4]: df2.col.isin(df1.col)
Out[4]:
0 False
1 False
2 False
3 True
Name: col, dtype: bool
Run Code Online (Sandbox Code Playgroud)
True仅当 in 中的值df2.col也在 in时才计算为df1.col。
然后,如果您完全熟悉 R,则可以使用与 R 中np.where大致相同的 which ifelse。
In [5]: np.where(df2.col.isin(df1.col), df1.col, 'NO_MATCH')
Out[5]:
0 NO_MATCH
1 NO_MATCH
2 NO_MATCH
3 d
Name: col, dtype: object
Run Code Online (Sandbox Code Playgroud)
对于df2.col出现在df1.col中的值的行,df1.col将为给定的行索引返回值 from 。如果该df2.col值不是 的成员df1.col,'NO_MATCH'则将使用默认值。
| 归档时间: |
|
| 查看次数: |
19142 次 |
| 最近记录: |