我想提取一个列的值,给出另一个列,它具有不同数据集的id。
DF-1:
ID A B
1 cat 22
2 dog 33
3 mamal 44
4 rat 55
5 rabbit 66
6 puppy 77DF-2:
name fav_animal
x 1,2,3
y 2,3
z 3,4 我想在一个新的名单中看到x的动物,name_animal说。
代码:
#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()输出:
list_id = [1,2,3]
name_animal = ['cat','dog','mamal']发布于 2018-11-21 13:07:52
首先用boolean indexing、next和iter检查find值,如果没有匹配的名称,则返回空列表。
a = next(iter(df2.loc[df2['name'] == 'x', 'fav_animal']), [])然后拆分值并将它们转换为整数:
list_id = list(map(int, a.split(',')))
print (list_id)
[1, 2, 3]利用isin first DataFrame进行最后一次滤波
name_animal = df1.loc[df1.ID.isin(list_id), 'A'].values.tolist()
print (name_animal)
['cat', 'dog', 'mamal']发布于 2018-11-21 13:07:39
例如,您可以使用此函数:
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']发布于 2018-11-21 13:18:22
我想你要找的是:
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']https://stackoverflow.com/questions/53412580
复制相似问题