首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据来自另一个表的id获取列的值

如何根据来自另一个表的id获取列的值
EN

Stack Overflow用户
提问于 2018-11-21 12:59:07
回答 4查看 58关注 0票数 1

我想提取一个列的值,给出另一个列,它具有不同数据集的id。

DF-1:

代码语言:javascript
复制
ID  A       B
1   cat     22
2   dog     33
3   mamal   44
4   rat     55
5   rabbit  66
6   puppy   77

DF-2:

代码语言:javascript
复制
name   fav_animal
  x   1,2,3
  y   2,3
  z   3,4 

我想在一个新的名单中看到x的动物,name_animal说。

代码:

代码语言:javascript
复制
#storing all the id's of x frist
list_id = []
name_animal = []
for i in list_ids:
    name_animal.append(df1.loc[df1.id == i, 'A'].values.to_list()

输出:

代码语言:javascript
复制
list_id = [1,2,3]
name_animal = ['cat','dog','mamal']
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-11-21 13:07:52

首先用boolean indexingnextiter检查find值,如果没有匹配的名称,则返回空列表。

代码语言:javascript
复制
a = next(iter(df2.loc[df2['name'] == 'x', 'fav_animal']), [])

然后拆分值并将它们转换为整数:

代码语言:javascript
复制
list_id = list(map(int, a.split(',')))
print (list_id)
[1, 2, 3]

利用isin first DataFrame进行最后一次滤波

代码语言:javascript
复制
name_animal = df1.loc[df1.ID.isin(list_id), 'A'].values.tolist()
print (name_animal)
['cat', 'dog', 'mamal']
票数 2
EN

Stack Overflow用户

发布于 2018-11-21 13:07:39

例如,您可以使用此函数:

代码语言:javascript
复制
def get_names(df, df2, name):
    indices = np.asarray(df2.loc[name].values[0].split(',')).astype(int)
    return indices.tolist(), df.loc[indices,:]['A'].tolist()

因此,例如,如果您希望名称为fav_animals x

代码语言:javascript
复制
list_id, name_animal = get_names(df,df2, 'x')

print(list_id)
[1, 2, 3]

print(name_animal)
['dog', 'mamal', 'rat']
票数 1
EN

Stack Overflow用户

发布于 2018-11-21 13:18:22

我想你要找的是:

代码语言:javascript
复制
df1 = pd.DataFrame({'ID':np.arange(1, 7),
    'A': ['cat', 'dog', 'mamal', 'rat', 'rabbit', 'puppy'],
                  'B': [22, 33, 44, 55, 66, 77]})

df2 = pd.DataFrame({'name': ['x', 'y', 'z'],
                  'fav_animal': ['1,2,3', '2,3', '3,4']})

df2.loc[df2.name == 'x', 'fav_animal'].str.split(',')[0]
['1', '2', '3']

返回字符串列表。因此,您需要使用map函数将值转换为整数。

代码语言:javascript
复制
mask = map(int, df2.loc[df2.name == 'x', 'fav_animal'].str.split(',')[0])

df1.loc[df1.ID.isin(mask), 'A'].values.tolist()
>['cat', 'dog', 'mamal']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53412580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档