【问题标题】:lookup from multiple columns pandas从多列熊猫中查找
【发布时间】:2018-03-20 09:44:57
【问题描述】:

我有 2 个数据帧 df1 和 df2,如下所示:

df1:

a
T11552
T11559
T11566
T11567
T11569
T11594
T11604
T11625

df2:

a   b
T11552  T11555
T11560  T11559
T11566  T11562
T11568  T11565
T11569  T11560
T11590  T11594
T11604  T11610
T11621  T11625
T11633  T11631
T11635  T11634
T13149  T13140

我想要一个新的数据框 df3,我想在 df2 中搜索 df1 的值。如果值存在于 df2 中,我想在 df1 中添加新列,返回 True/False,如下所示。

df3:

a   v
T11552  TRUE
T11559  TRUE
T11566  TRUE
T11567  FALSE
T11569  TRUE
T11594  TRUE
T11604  TRUE
T11625  TRUE
T11633  TRUE
T11634  TRUE

【问题讨论】:

  • 如果我的回答对您有帮助,请不要忘记accept 它 - 单击答案旁边的复选标记 (v) 将其从灰色切换为已填充。谢谢。跨度>

标签: python python-3.x pandas dataframe


【解决方案1】:

assign 用于新的DataFrameisin,并通过ravel 将所有值转换为展平数组,以提高性能可以仅检查unique 值并通过in1d 进行检查:

df3 = df1.assign(v = lambda x: x['a'].isin(np.unique(df2.values.ravel())))
#alternative solution
#df3 = df1.assign(v = lambda x: np.in1d(x['a'], np.unique(df2[['a','b']].values.ravel())))

#if need specify columns in df2 for check
df3 = df1.assign(v = lambda x: x['a'].isin(np.unique(df2[['a','b']].values.ravel())))
print (df3)
        a      v
0  T11552   True
1  T11559   True
2  T11566   True
3  T11567  False
4  T11569   True
5  T11594   True
6  T11604   True
7  T11625   True

【讨论】:

  • @amrutha - 很高兴能帮上忙!
【解决方案2】:

试试这个:

df3 = df1[['a']].copy()
df3['v'] = df3['a'].isin(set(df2.values.ravel()))

以上代码将:

  1. 使用df1 中的“a”列创建一个新数据框。
  2. 创建一个布尔列“v”,通过setnumpy.ravel 测试列“a”的每个值与df2 中的值是否存在。

【讨论】:

  • 我想从“a”和“b”列中搜索
猜你喜欢
  • 2017-07-30
  • 2012-08-23
  • 2018-11-23
  • 2016-05-29
相关资源
最近更新 更多