python - 如果行值包含在单独数据帧的列中,则返回 bool 指示符

标签 python pandas

我有一个充满标识符的列

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/

相关文章:

python - Python odeint 例程可解联立方程数量的限制

python - 从 DynamoDB 表到另一个 DynamoDB 表的数据传输

python - get_text() 或文本属性不适用于标签

python - 如何使用 pandas 从 csv 读取多行到单个数据帧行

python - 我如何解决 'UserWarning: DataFrame columns are not unique, some columns will be omitted' ?

python - 用图案而不是颜色填充多边形 Geopandas

python - 查找所有 tkinter 字体

python - 设置 python 管道 - python 子进程

python - 你能在 Pandas 中拆分日期时间月份吗?

python - Pandas:如何按组对变量求和?