首页 > 解决方案 > 根据 aggregion 和条件替换 pandas 中的值

问题描述

我有一个这样的数据框:

在此处输入图像描述

我想用特定值替换col1中的值(例如:用“b”)。我应该根据 col1 和 col2 计算每个组的记录。例如col1 = a, col2 = t 的计数是 3col1 = a, col2 = u 是 1

如果计数大于 2,则将 col1 的值替换为“b”。对于此示例,我想将所有“a”值替换为“b”,其中 col2 = t。

我尝试了下面的代码,但它并没有在这种情况下改变所有的“a”值。

import pandas as pd
df = pd.read_excel('c:/test.xlsx')
df.loc[df[(df['col1'] == 'a') & (df['col2'] == 't')].agg("count")["ID"] >2, 'col1'] = 'b'

我想要这个结果:

在此处输入图像描述

标签: pythonpandas

解决方案


您可以使用numpy.where并检查是否满足所有条件。如果是,则将 col1 中的值替换为 b,否则保持原样:

import numpy as np
df['col1'] = np.where((df['col1']=='a') & 
                      (df['col2']=='t') & 
                      (df.groupby('col1')['ID'].transform('count') > 2),'b',df['col1'])

印刷:

   ID col1 col2
0   1    b    t
1   2    b    t
2   3    b    t
3   4    a    u
4   5    b    t
5   6    b    t
6   7    b    u
7   8    c    t
8   9    c    u
9  10    c    w

使用transform('count'), 将检查分组(按 col1)ID 列是否有超过 2 个值。


推荐阅读