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