我有两个熊猫数据框:

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


但是我不知道如何在“每个人”数据框中获得他们的顺序位置。理想情况下,该解决方案将在“朋友”数据框中添加一个查找列,如下所示。爱丽丝是每个人中的第五名。吉姆是第三名。爱德华0号。订单(匹配我原来朋友的订单)显然很关键。

  name   everyone_id
0 Alice   5
1 Jim     3
2 Edward  0


我可能会编写一个慢速查找函数和friends.apply()它,但是假设pandas具有一个我找不到的简单函数或参数。

最佳答案

您可以将map with交换索引与值一起使用:

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


类似的解决方案是mapSeries

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

关于python - 如何从pandas.DataFrame提取索引,其中值与另一个数据帧相交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48344549/

10-12 14:07
查看更多