2024-09-30 08:36:21 发布
网友
如果df['col']='a','b','c'和df2['col']='a123','b456','d789'我如何创建df2['is_contained']='a','b','no_match',如果df['col']中的值在df2['col']中找到,则返回df['col']值,如果找不到匹配,则返回“不匹配”?我也不希望有多个匹配,但在不太可能的情况下,我希望返回一个类似“多个匹配”的字符串。
df['col']='a','b','c'
df2['col']='a123','b456','d789'
df2['is_contained']='a','b','no_match'
df['col']
df2['col']
有了这个玩具数据集,我们想在df2中添加一个新列,它将包含前三行的no_match,最后一行将包含值'd',因为该行的col值(字母'a')出现在df1中。
df2
no_match
'd'
col
'a'
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']})
换句话说,只有当行的df2['col']值出现在df1['col']的某个位置时,df1中的值才应该用于在df2中填充此新列。
df1['col']
df1
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
如果这是理解您的问题的正确方法,那么您可以使用pandasisin:
isin
In [4]: df2.col.isin(df1.col) Out[4]: 0 False 1 False 2 False 3 True Name: col, dtype: bool
只有当df2.col中的值也在df1.col中时,此值才计算为True。
df2.col
df1.col
True
然后,如果您完全熟悉R,那么可以使用np.where,这或多或少与R中的ifelse相同。
np.where
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
对于在df1.col中出现df2.col值的行,将为给定行索引返回df1.col中的值。如果df2.col值不是df1.col的成员,则将使用默认的'NO_MATCH'值。
'NO_MATCH'
在0.13中,可以使用^{}:
In [11]: df1 = pd.DataFrame({'col': ['a', 'b', 'c']}) In [12]: df2 = pd.DataFrame({'col': ['d23','b456','a789']}) In [13]: df2.col.str.extract('(%s)' % '|'.join(df1.col)) Out[13]: 0 NaN 1 b 2 a Name: col, dtype: object
有了这个玩具数据集,我们想在
df2
中添加一个新列,它将包含前三行的no_match
,最后一行将包含值'd'
,因为该行的col
值(字母'a'
)出现在df1中。换句话说,只有当行的
df2['col']
值出现在df1['col']
的某个位置时,df1
中的值才应该用于在df2
中填充此新列。如果这是理解您的问题的正确方法,那么您可以使用pandas
isin
:只有当
df2.col
中的值也在df1.col
中时,此值才计算为True
。然后,如果您完全熟悉R,那么可以使用
np.where
,这或多或少与R中的ifelse
相同。对于在
df1.col
中出现df2.col
值的行,将为给定行索引返回df1.col
中的值。如果df2.col
值不是df1.col
的成员,则将使用默认的'NO_MATCH'
值。在0.13中,可以使用^{} :
相关问题 更多 >
编程相关推荐