python - 使用 isin() 来确定应该打印什么

标签 python pandas numpy

现在我有两个数据帧(data1data2)

我想根据 ID 是否同时存在于 data2 和 data1 中,在名为 data1 的数据框中打印一列字符串值。

我现在正在做的是给我一个 bool 值列表(TrueFalse 如果 ID 存在于两个数据帧中但不存在于字符串列中)。

print(data2['id'].isin(data1.id).to_string())

产量

0      True
1      True
2      True
3      True
4      True
5      True

如有任何想法,我们将不胜感激。

这里是数据1的样本

'user_id', 'id', 'rating', 'unix_timestamp'

196 242 3   881250949
186 302 3   891717742
22  377 1   878887116

data2 包含这样的内容

'id', '标题', '发布日期', 'video_release_date', 'imdb_url'

37|Nadja (1994)|01-Jan-1994||http://us.imdb.com/M/title-exact?Nadja%20(1994)|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0
38|Net, The (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Net,%20The%20(1995)|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|1|0|0
39|Strange Days (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Strange%20Days%20(1995)|0|1|0|0|0|0|1|0|0|0|0|0|0|0|0|1|0|0|0

最佳答案

如果 id 的所有值都是唯一的:

我想你需要mergeinner 连接。对于 data2 只选择 id 列,on 参数应该省略,因为加入所有列 - 这里只有 id :

df = pd.merge(data1, data2[['id']])

示例:

data1 = pd.DataFrame({'id':list('abcdef'),
                      'B':[4,5,4,5,5,4],
                      'C':[7,8,9,4,2,3]})

print (data1)
   B  C id
0  4  7  a
1  5  8  b
2  4  9  c
3  5  4  d
4  5  2  e
5  4  3  f

data2 = pd.DataFrame({'id':list('frcdeg'),
                      'D':[1,3,5,7,1,0],
                      'E':[5,3,6,9,2,4],})

print (data2)
   D  E id
0  1  5  f
1  3  3  r
2  5  6  c
3  7  9  d
4  1  2  e
5  0  4  g

df = pd.merge(data1, data2[['id']])
print (df)
   B  C id
0  4  9  c
1  5  4  d
2  5  2  e
3  4  3  f

如果 id 在一个或另一个 Dataframe 中重复使用另一个答案,也添加了类似的解决方案:

df = data1[data1['id'].isin(set(data1['id']) & set(data2['id']))]

ids = set(data1['id']) & set(data2['id'])
df = data2.query('id in @ids')

df = data1[np.in1d(data1['id'], np.intersect1d(data1['id'], data2['id']))]

示例:

data1 = pd.DataFrame({'id':list('abcdef'),
                      'B':[4,5,4,5,5,4],
                      'C':[7,8,9,4,2,3]})

print (data1)
   B  C id
0  4  7  a
1  5  8  b
2  4  9  c
3  5  4  d
4  5  2  e
5  4  3  f

data2 = pd.DataFrame({'id':list('fecdef'),
                      'D':[1,3,5,7,1,0],
                      'E':[5,3,6,9,2,4],})

print (data2)
   D  E id
0  1  5  f
1  3  3  e
2  5  6  c
3  7  9  d
4  1  2  e
5  0  4  f

df = data1[data1['id'].isin(set(data1['id']) & set(data2['id']))]
print (df)
   B  C id
2  4  9  c
3  5  4  d
4  5  2  e
5  4  3  f

编辑:

您可以使用:

df = data2.loc[data1['id'].isin(set(data1['id']) & set(data2['id'])), ['title']]

ids = set(data1['id']) & set(data2['id'])
df = data2.query('id in @ids')[['title']]

df = data2.loc[np.in1d(data1['id'], np.intersect1d(data1['id'], data2['id'])), ['title']]

关于python - 使用 isin() 来确定应该打印什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48483560/

相关文章:

python - 根据列表中列的值过滤 Pandas 数据框列

python 将字符串转换为整数数组

python - 与 R 代码相比,需要正确使用 scipy.optimize.fmin_bfgs

python - "python -c ' print' "and "(python -c 'print' ; cat)"在 linux 中有什么区别

python - Django HTMLForms 属性错误 属性错误 : module 'polls.views' has no attribute 'index'

Pandas、条形图注释

python - numpy中这些数组形状之间的区别

python - 将标准输出重定向到 Python 中的记录器

python - 这两种基于生成器的协程是同一个概念吗?

python - 在 Pandas 中重新编码分类变量