【问题标题】:Apply pandas function on column only on certain rows仅在某些行上对列应用 pandas 函数
【发布时间】:2018-07-10 17:31:53
【问题描述】:
|   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    | 

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用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)
    

    【讨论】:

    • 谢谢!一件事,你能解释一下 np.where 是如何工作的吗?我无法理解这三个参数的用途,以及每个参数的作用(特别是第二个和第三个)。
    • @hedebyhedge - 当然,它会按条件创建 numpy 数组 - 如果条件为 True,则从 df['val'].apply(f) 添加值,如果 False 将值从 df['val'] 添加到输出。
    猜你喜欢
    • 2018-10-31
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多