如何基于另一个表中给出的ID获取列的值

时间:2018-11-21 12:59:07

标签: python python-3.x pandas

我想提取另一列具有不同数据集ID的列的值。

DF-1:

LeastI_ex

DF-2:

Least_le

我想在新列表中看到x的最爱动物,说的是name_animal。

代码:

THE x. False

输出:

ID  A       B
1   cat     22
2   dog     33
3   mamal   44
4   rat     55
5   rabbit  66
6   puppy   77

4 个答案:

答案 0 :(得分:2)

如果没有匹配的名称,则首先检查找到具有boolean indexingfav_animalnext的{​​{1}}值是否为空列表。

iter

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

a = next(iter(df2.loc[df2['name'] == 'x', 'fav_animal']), [])

最后一个过滤器是按isin开头的list_id = list(map(int, a.split(','))) print (list_id) [1, 2, 3]

DataFrame

答案 1 :(得分:1)

您可以使用此功能,例如:

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

list_id, name_animal = get_names(df,df2, 'x')

print(list_id)
[1, 2, 3]

print(name_animal)
['dog', 'mamal', 'rat']

答案 2 :(得分:1)

我认为您正在寻找的是这个

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函数将值转换为整数。

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']

答案 3 :(得分:0)

像这样吗?

for i in df2.fav_animal.tolist():
    print(df1.loc[map(int, i.split(","))]["A"].tolist())

输出:

['dog', 'mamal', 'rat']
['mamal', 'rat']
['rat', 'rabbit']

替代:

print([df1.loc[map(int, i.split(","))]["A"].tolist() for i in df2.fav_animal.tolist()])

输出:

[['dog', 'mamal', 'rat'], ['mamal', 'rat'], ['rat', 'rabbit']]