如果列True
包含与sku_match
匹配的值,我希望将ids
的值添加到列sku
。
我的ids
列包含列表,例如['123', '567-A', 'BH2228']
我的当前代码仅在匹配值位于列表的[0]
位置时显然有效(显然):
sku = '567-A'
df.loc[df.ids.str[0] == sku, 'sku_match'] = True
我想检查所有列表中的项目。在非类似熊猫的伪代码中,它就像
sku = '567-A'
for index, row in .df:
if sku in df[index].ids:
df[index].sku_match = True
我尝试了.loc
的各种列表推导,我很确定这是错误的方法,我试过isin()
但它似乎与我想要的相反要做,并且没有其他stackoverflow问题解决这个特定的情况,据我所知。我可以在.loc
内的这个上下文中迭代每一行的列表吗?或者我是否需要完全采用另一种方法解决这个问题?
答案 0 :(得分:0)
您可以将系列扩展为2维,然后检查每条记录的任何值是否等于sku:
>>> ids = [['123', '567-A', 'BH2228'],
... ['567-A', 'xxx', 'BH2229'],
... ['zzz', '679-B', 'BH2220']]
>>> df = pd.DataFrame({'ids': ids})
>>> sku = '567-A'
>>> df['sku_match'] = df['ids'].apply(pd.Series).eq(sku).any(axis=1)
>>> df
ids sku_match
0 [123, 567-A, BH2... True
1 [567-A, xxx, BH2... True
2 [zzz, 679-B, BH2... False
如果您关心运行时速度,您还可以将列转换为列表并对其进行操作:
>>> df['sku_match'] = tuple(map(lambda x: sku in x, df.ids.tolist()))
答案 1 :(得分:0)
您可以尝试使用in
['567-A' in x for x in df.ids.values]
Out[852]: [True, True, False]