熊猫 - 使用列内容查找索引

  • 本文关键字:查找 索引 熊猫 pandas
  • 更新时间 :
  • 英文 :


我有一个两列之间有关系的熊猫数据帧。

index| name | manager |
-----+------+---------+
0| Bob  | Bob     |
1| Mary | Sue     |
2| Sue  | Bob     |
3| Ann  | Sue     |

我想创建一个新列,从经理列中查找每个人员经理的姓名,并将该行的索引值用于新系列。

index| name | manager | mananger_index |
-----+------+---------+----------------+
0| Bob  | Bob     |               0|
1| Mary | Sue     |               2|
2| Sue  | Bob     |               0|
3| Ann  | Sue     |               2|

现在,如果我使用纯python解决方案来解决问题,我会这样做:

# Create a dict from names to row indexes
name_lookup = {}
for row in df.iterrows():
name_lookup[row.name] = row.index
# Lookup manager's row index for each person's manager.
mananger_indexes = []
for row in df.iterrows():
mananger_indexes.append(name_lookup[row.manager])
# Save my new column
df['mananger_index'] = mananger_indexes

但考虑到它是熊猫,可能有一个不错的一两行解决方案。

您可以按名称为经理编制索引,并使用map

manager_indexed_by_name = df['name'].reset_index().set_index('name')['index']
df['manager_index'] = df['manager'].map(manager_indexed_by_name)

或单行:

df['manager_index'] = df['manager'].map(df['name'].reset_index()
.set_index('name')['index'])

输出:

name manager  manager_index
0   Bob     Bob              0
1  Mary     Sue              2
2   Sue     Bob              0
3   Ann     Sue              2

只需将该python代码的每个部分翻译成其Pandas等效项,这就可以成为一个简单的两行代码。

  1. 我们可以通过切换序列的索引和值来获取查找表以从值中查找索引。

  2. Series.map(( 可以采用类似字典的对象来查找值,而不仅仅是为每个值运行的代码 lambda。

manager_lookup = pd.Series(df.index.values, index=df.name)
df['manager_index'] = df.manager.map(manager_lookup)

最新更新