python - 如何从 pandas.DataFrame 中提取索引,其中值与另一个数据帧相交?

标签 python pandas dataframe indexing

我有两个 pandas 数据框:

import pandas as pd

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

everyone = pd.dataframe({
    'name' : ['Edward', 'Conrad', 'Lucy', 'Jim', 'Frank', 'Alice', 'Sam']
})

我可以按照“每个人”的顺序获取我的 friend 列表,并带有索引。

everyone.loc[everyone['name'].isin(friends['name'])]

我可以获得我的 friend 在“每个人”中的位置的 bool 掩码。

everyone['name'].isin(friends['name'])

我什至认为我采用了以下笨重的解决方案,但它也重新排序了内容。

everyone.reset_index().merge(friends, how='right', on='name').set_index('index')

但我不知道如何获得他们在“每个人”数据框中的序号位置。理想情况下,该解决方案将向好友数据框中添加一个查找列,如下所示。 Alice是所有人中的第五名;吉姆排第三;爱德华0号。顺序(与我原来 friend 的顺序一致)显然很重要。

  name   everyone_id
0 Alice   5
1 Jim     3
2 Edward  0

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

最佳答案

您可以使用map 带有交换索引和值:

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

类似的解决方案是 map系列:

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/

相关文章:

python - 为什么在MRO中以这种方式订购类(class)?

apache 服务器中的 Python Cgi 脚本

python - 研究 Pandas DataFrame 中的不同数据类型

r - 基于多种条件的数据帧的多重子集

python - 使用存储在另一个数据帧中的索引引用数据帧

python - 全局名称 'get_serializer_class' 未定义

python - 按成员在另一个列表中的顺序对列表元素进行分组

pandas - 如何将带有行和列标签的矩阵数据框转换为常规的 pandas 数据框?

python - 使用 sklearn StandardScaler 缩放的数据平均值不为零

r - 如何使用 rpy2 更改数据框的列名