Pandas:使用.loc查找项目,迭代列单元格中的列表

时间:2018-04-22 00:14:13

标签: python pandas

如果列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内的这个上下文中迭代每一行的列表吗?或者我是否需要完全采用另一种方法解决这个问题?

2 个答案:

答案 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]