python - 仅在特定行的列上应用 pandas 函数

标签 python pandas

|   user  |       category    | val  | 
| ------  | ------------------| -----|
| user 1  | c1                |   3  |  
| user 1  | c2                |   4  |
| user 1  | c3                |   8  | 
| user 2  | c1                |   5  |
| user 2  | c2                |   9  | 
| user 2  | c3                |   10 |

假设我想将函数 f 应用于 val 列。例如,返回数据帧的最佳方式是什么,以便 f 仅应用于类别为 c1 的值?

|   user  |       category    | val     |
| ------  | ------------------| -----   | 
| user 1  | c1                |   f(3)  | 
| user 1  | c2                |   4     | 
| user 1  | c3                |   8     | 
| user 2  | c1                |  f(5)   | 
| user 2  | c2                |   9     |
| user 2  | c3                |   10    | 

最佳答案

使用numpy.where :

df['val'] = np.where(df['category'] == 'c1', df['val'].apply(f), df['val'])

或者用loc过滤:

mask = df['category'] == 'c1'
df.loc[mask, 'val'] = df.loc[mask, 'val'].apply(f)

关于python - 仅在特定行的列上应用 pandas 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261740/

相关文章:

python - 在 SQLAlchemy 中对多列进行排序的语法

python - 如何发现 Python Fabric 中的当前角色

python - 如何在 Pandas 列中获取唯一的子串

python - 确定 pandas 数据框中一组列的顺序何时发生变化

python - 如何计算 'item' 列中有多少个不同的项目?

python - 如何将不同的 DataFrame 组合成一个分组条形图

python - 如何将 `style` 与 DataFrame 上的 `to_html` 类结合使用?

python - python中具有截止值的高斯滤波图像

python - 应用具有多个参数的函数,包括 python 数据框中 groupby 上一行的值

c++ - Boost 没有静态链接到 boost::python 共享对象