Pandas系列或列表索引

2024-04-20 14:02:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个组ID列表:

letters = ['A', 'A/D', 'B', 'B/D', 'C', 'C/D', 'D']

以及组的数据帧:

groups = pd.DataFrame({'group': ['B', 'A/D', 'D', 'D', 'A']})

我想在dataframe中创建一个列,给出组id在列表中的位置,如下所示:

  group group_idx
0     B         2
1   A/D         1
2     D         6
3     D         6
4     A         0

我目前的解决方案是:

group_to_num = {hsg: i for i, hsg in enumerate(letters)}
groups['group_idx'] = groups.applymap(lambda x: group_to_num.get(x)).max(axis=1).fillna(-1).astype(np.int32)

但这似乎不雅。有没有更简单的方法?你知道吗


Tags: to数据iddataframe列表group解决方案num
2条回答

使用map

import pandas as pd

letters = ['A', 'A/D', 'B', 'B/D', 'C', 'C/D', 'D']
group_to_num = {hsg: i for i, hsg in enumerate(letters)}
groups = pd.DataFrame({'group': ['B', 'A/D', 'D', 'D', 'A']})

groups['group_idx'] = groups.group.map(group_to_num)
print(groups)

输出

  group  group_idx
0     B          2
1   A/D          1
2     D          6
3     D          6
4     A          0

您可以尝试在数据帧构造函数之后合并:

groups.merge(pd.DataFrame(letters).reset_index(),left_on='group',right_on=0).\
           rename(columns={'index':'group_idx'}).drop(0,1)

   group  group_idx
0     B        2
1   A/D        1
2     D        6
3     D        6
4     A        0

相关问题 更多 >