我有一个充满标识符的列
df1.['ID1']
aaa
aab
aac
...
zzx
zzy
zzz
单独数据框中的另一列,其标识符包含在 ID1 列中
df2.['ID2']
aab
...
zzy
我需要向 df1 添加一列,指示每行中的标识符是否包含在 df2 的列中。所以像这样:
df1.['shared']
aaa False
aab True
aac False
...
zzx False
zzy True
zzz False
最佳答案
选项 1
使用df.isin
:
In [233]: df
Out[233]:
Col1
0 aaa
1 aab
2 aac
3 zzx
4 zzy
5 zzz
In [234]: df2
Out[234]:
Col2
0 aab
1 zzy
In [235]: df.Col1.isin(df2.Col2)
Out[235]:
0 False
1 True
2 False
3 False
4 True
5 False
Name: Col1, dtype: bool
<小时/>
选项 2
您可以使用np.in1d
:
In [344]: pd.Series(np.in1d(df.Col1, df2.Col2), name='Col1')
Out[344]:
0 False
1 True
2 False
3 False
4 True
5 False
Name: Col1, dtype: bool
时间安排:
In [245]: len(df_test)
Out[245]: 60000
In [246]: %timeit df_test.Col1.isin(df2.Col2) # in this post
1000 loops, best of 3: 1.44 ms per loop
In [247]: %timeit df_test.Col1.apply(lambda x: x in df2.Col2) # df.apply solution
1 loop, best of 3: 601 ms per loop
In [349]: %timeit pd.Series(np.in1d(df_test.Col1, df2.Col2), name='Col1')
100 loops, best of 3: 2.92 ms per loop
关于python - 如果行值包含在单独数据帧的列中,则返回 bool 指示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579857/