Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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/0/email/3.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 如何从pandas.DataFrame中提取索引,其中值与另一个DataFrame相交?_Python_Pandas_Dataframe_Indexing - Fatal编程技术网

Python 如何从pandas.DataFrame中提取索引,其中值与另一个DataFrame相交?

Python 如何从pandas.DataFrame中提取索引,其中值与另一个DataFrame相交?,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我有两个数据帧: import pandas as pd friends = pd.dataframe({ 'name' : ['Alice', 'Jim', 'Edward'], }) everyone = pd.dataframe({ 'name' : ['Edward', 'Conrad', 'Lucy', 'Jim', 'Frank', 'Alice', 'Sam'] }) 我可以按“每个人”的顺序得到我朋友的名单,并附有索引 everyone.loc[everyo

我有两个数据帧:

import pandas as pd

friends = pd.dataframe({
    'name' : ['Alice', 'Jim', 'Edward'],
})

everyone = pd.dataframe({
    'name' : ['Edward', 'Conrad', 'Lucy', 'Jim', 'Frank', 'Alice', 'Sam']
})
我可以按“每个人”的顺序得到我朋友的名单,并附有索引

everyone.loc[everyone['name'].isin(friends['name'])]
我可以在“每个人”中找到我朋友所在位置的布尔掩码

everyone['name'].isin(friends['name'])
我甚至认为我找到了一个笨拙的解决方案,但它也重新安排了事情

everyone.reset_index().merge(friends, how='right', on='name').set_index('index')
但我不知道如何在“everyone”数据框中获得它们的顺序位置。理想情况下,该解决方案会在friends数据框中添加一个查找列,如下所示。爱丽丝是每个人中的第五名;吉姆是第三;第0个爱德华。顺序(与我原来朋友的顺序一致)显然很关键

  name   everyone_id
0 Alice   5
1 Jim     3
2 Edward  0
我可能会编写一个缓慢的查找函数和friends.apply(),但假设pandas有一个我找不到的更简单的函数或参数。

您可以将
交换索引一起使用:

d = everyone['name'].to_dict()
d = {v:k for k, v in d.items()}

friends['everyone_id'] = friends['name'].map(d)
print (friends)
     name  everyone_id
0   Alice            5
1     Jim            3
2  Edward            0
类似的解决方案是通过
系列

s = pd.Series(everyone['name'].index, index=everyone['name'].values)
friends['everyone_id'] = friends['name'].map(s)
print (friends)

     name  everyone_id
0   Alice            5
1     Jim            3
2  Edward            0

有趣。除了pandas之外,我从未想过要使用普通的python语言功能,比如字典。地图非常有用。:-)谢谢你@jezrael