为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开满天机 2022-12-20 15:30:52
我有一个数据框,其中包含一个包含名为 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 然后比较值来实现这一点,但我想知道是否有更优雅的东西?
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

使用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  Match

0  2128441  2128442, 2128443, 2128444, 2128441   True

1  2128447                    2128446, 2128447   True

2  2128500                    2128503, 2128508  False

要么:


df['Match'] = df.apply(lambda x: str(x['ID']) in x['Multiple_IDs'], axis=1)

print (df)

        ID                        Multiple_IDs  Match

0  2128441  2128442, 2128443, 2128444, 2128441   True

1  2128447                    2128446, 2128447   True

2  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)



查看完整回答
反对 回复 2022-12-20
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我将要做的


s=pd.DataFrame(df.Multiple_IDs.str.split(', ').tolist(),index=df.index).eq(df.ID.astype(str),axis=0).any(1)

Out[10]: 

0     True

1     True

2    False

dtype: bool

df['Match']=s


查看完整回答
反对 回复 2022-12-20
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信