Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据另一列的值列表查找一列中的值_Python_Pandas - Fatal编程技术网

Python 根据另一列的值列表查找一列中的值

Python 根据另一列的值列表查找一列中的值,python,pandas,Python,Pandas,我有一个数据框,包含和id和value列 df= id val 'a' 1 'b' 3 'c' 9 我有一个重复id值的列表 i_list=['a','a','a','b'] 我需要使用dataframe pairs id val将这个重复id值列表映射到相应的重复值列中 out_desired=[1,1,1,3] 现在我正在做: out_desired=[df[df.id==curr_id].val.values for curr_id in i_list ]

我有一个数据框,包含和id和value列

df=
id    val
'a'    1
'b'    3
'c'    9 

我有一个重复id值的列表

i_list=['a','a','a','b']
我需要使用dataframe pairs id val将这个重复id值列表映射到相应的重复值列中

out_desired=[1,1,1,3]
现在我正在做:

out_desired=[df[df.id==curr_id].val.values for curr_id in i_list ]
如何以更高效且更简洁的方式执行此操作?

如果ID按字典顺序排序,则可以使用:

或者,您也可以将id设置为对未排序id有效的索引:

如果未对id列进行排序,请进行排序,然后按照上述方法对第一种方法进行操作:

print(df)
  id  val
0  c    1
1  b    3
2  a    9

df_ = df.sort_values(['id'])
df_.loc[df_['id'].searchsorted(i_list), 'val'].to_numpy().tolist()
[1, 1, 1, 3]
如果ID按字典顺序排序,则可以使用:

或者,您也可以将id设置为对未排序id有效的索引:

如果未对id列进行排序,请进行排序,然后按照上述方法对第一种方法进行操作:

print(df)
  id  val
0  c    1
1  b    3
2  a    9

df_ = df.sort_values(['id'])
df_.loc[df_['id'].searchsorted(i_list), 'val'].to_numpy().tolist()
[1, 1, 1, 3]
你可以试着用它,因为它对我来说似乎更快

df={'id':['a','b','c'],'value':[1,3,9]} df=pd.DataFramedf.set_索引'id' 测试=['a','b','c']*8 我相信它给出了正确的答案

您可以尝试使用,因为它对我来说似乎更快

df={'id':['a','b','c'],'value':[1,3,9]} df=pd.DataFramedf.set_索引'id' 测试=['a','b','c']*8
我相信它给出了正确的答案

更新了@00_uuu00_u00第二种方法可能更快@00_u00_u00设置为indexI将保留问题几天,因为其他答案也可能有用。您是否检查了第二种方法是否工作得更快?我认为它更简单,应该更快@00_uu00_u00更新@00_u00_u00第二种方法可能更快@00_u00_u00设置为indexI将问题保留几天,因为其他答案也可能有用。您检查了第二种方法是否工作得更快吗?我认为它更简单,而且应该更快@00_uuuu00_uuu00
print(df)
  id  val
0  c    1
1  b    3
2  a    9

df_ = df.sort_values(['id'])
df_.loc[df_['id'].searchsorted(i_list), 'val'].to_numpy().tolist()
[1, 1, 1, 3]
%timeit df.merge(pd.DataFrame({'id':test}), left_index=True, right_on='id', how='right')['value'].values
1.32 ms ± 33.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit [df[df.index==curr_id].values for curr_id in test ]
5.81 ms ± 123 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)