在列表中查找数字,数字和列表都存储在pandas单元格中

时间:2016-12-04 05:06:15

标签: python list pandas

df = DataFrame({'Number': (1, 3, 4, 5), 
                'Lists': ([1], [3, 4, 5], [6, 7], [8])})

我想创建另一列“Isin”,如果“Number”在每个行的“Lists”字段中,则设置为1.

"Isin"
   1
   1
   0
   0

我尝试了许多基于df['Number'].isin(df['Lists'])的事情......没有任何运气!它失败,不可用类型:'list'

1 个答案:

答案 0 :(得分:0)

选项1
使用快速的numpy方法

def box(v):
    lens = np.array([len(item) for item in v])
    mask = lens[:,None] > np.arange(lens.max())
    out = np.full(mask.shape, np.nan)
    out[mask] = np.concatenate(v)
    return out

df['Isin'] = (box(df.Lists.tolist()) == df.Number.values[:, None]).any(1) * 1

选项2
创意拉链

f = lambda x: 1 if set.intersection(*map(set, x)) else 0
df['Isin'] = [f(t) for t in zip(df.Lists.values.tolist(),
                                df.Number.values[:, None].tolist())]

df

enter image description here