假设我有以下DataFrame和字典:

df = pd.DataFrame({'group_col':['g1','g1','g1','g1','g2','g2','g2','g2'], 'map_col': ['a','b','c','d','a','b','c','d'], 'replace_col':[1,2,3,4,5,6,7,8]})
map_dict = {'a': 'b', 'c': 'd'}

下面是df条:

  group_col map_col  replace_col
0        g1       a            1
1        g1       b            2
2        g1       c            3
3        g1       d            4
4        g2       a            5
5        g2       b            6
6        g2       c            7
7        g2       d            8

我想根据map_col对分组列group_col中的每个组使用map_dict的映射来替换replace_col中的值,获得以下数据帧:

  group_col map_col  replace_col
0        g1       a            2
1        g1       b            2
2        g1       c            4
3        g1       d            4
4        g2       a            6
5        g2       b            6
6        g2       c            8
7        g2       d            8

对于要进行多个组和替换的大型数据帧,最佳/最快的方法是什么?假设map_col中的条目在每个组内不重复(如上例所示).

推荐答案

mapmerge:

df['replace_col'] = (df[['group_col']]
    .merge(df, left_on=['group_col', df['map_col'].map(map_dict)],
           right_on=['group_col', 'map_col'], how='left'
          )['replace_col']
    .fillna(df['replace_col']).convert_dtypes()
   )

效率较低的替代方案,groupby.apply:

df['replace_col'] = (df.groupby('group_col')
                       .apply(lambda g: g['map_col'].map(map_dict)
                                      .map(g.set_index('map_col')['replace_col'])
                                     .fillna(g['replace_col']))
                       .droplevel(0).convert_dtypes()
                    )

输出:

  group_col map_col  replace_col
0        g1       a            2
1        g1       b            2
2        g1       c            4
3        g1       d            4
4        g2       a            6
5        g2       b            6
6        g2       c            8
7        g2       d            8

Python相关问答推荐

如何在Pandas 中存储二进制数?

将C struct 的指针传递给Python中的ioctel

Python:MultiIndex Dataframe到类似json的字典列表

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

三个给定的坐标可以是矩形的点吗

即使在可见的情况下也不相互作用

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

如何使用html从excel中提取条件格式规则列表?

Pandas计数符合某些条件的特定列的数量

NumPy中条件嵌套for循环的向量化

提取相关行的最快方法—pandas

从嵌套的yaml创建一个嵌套字符串,后面跟着点

SQLAlchemy bindparam在mssql上失败(但在mysql上工作)

Plotly Dash Creating Interactive Graph下拉列表

启动带有参数的Python NTFS会导致文件路径混乱

在Python中调用变量(特别是Tkinter)

为什么我的sundaram筛这么低效

30个非DATETIME天内的累计金额

统计numpy. ndarray中的项目列表出现次数的最快方法