猿问

如何根据列列表值和附加列中的值添加熊猫“匹配”?

我有一个数据框,其中包含一个包含名为 Multiple_IDS 的标识符列表的列和一个名为 ID 的列。现在,我想创建一个名为“Match”的附加列,它告诉天气 Multiple_IDs 列中是否包含 ID。输出应该是一个名为 Match 的附加列,其中包含 True 或 False 值。这里有一些示例输入数据:

data = {'ID':[2128441, 2128447, 2128500], 'Multiple_IDs':["2128442, 2128443, 2128444, 2128441", "2128446, 2128447", "2128503, 2128508"]}
df = pd.DataFrame(data)

该列表的数据类型为“object”。

根据上面提供的输入数据,期望的输出将是这样的。

我知道我可以使用 explode 然后比较值来实现这一点,但我想知道是否有更优雅的东西?



开满天机
浏览 89回答 2
2回答

白猪掌柜的

使用in语句 if 是可能的测试而无需单独的 each ID:df['Match'] = [str(x) in y for x, y in df[['ID','Multiple_IDs']].to_numpy()]print (df)        ID                        Multiple_IDs  Match0  2128441  2128442, 2128443, 2128444, 2128441   True1  2128447                    2128446, 2128447   True2  2128500                    2128503, 2128508  False要么:df['Match'] = df.apply(lambda x: str(x['ID']) in x['Multiple_IDs'], axis=1)print (df)        ID                        Multiple_IDs  Match0  2128441  2128442, 2128443, 2128444, 2128441   True1  2128447                    2128446, 2128447   True2  2128500                    2128503, 2128508  False另一个想法是通过拆分值匹配:df['Match'] = [str(x) in y.split(', ') for x, y in df[['ID','Multiple_IDs']].to_numpy()]df['Match'] = df.apply(lambda x: str(x['ID']) in x['Multiple_IDs'].split(', '), axis=1)

喵喵时光机

我将要做的s=pd.DataFrame(df.Multiple_IDs.str.split(', ').tolist(),index=df.index).eq(df.ID.astype(str),axis=0).any(1)Out[10]: 0     True1     True2    Falsedtype: booldf['Match']=s
随时随地看视频慕课网APP

相关分类

Python
我要回答