【问题标题】:Can I apply a function to multiple columns in Pandas dataframe without a for loop?我可以在没有 for 循环的情况下将函数应用于 Pandas 数据框中的多个列吗?
【发布时间】:2021-06-16 05:02:25
【问题描述】:

有没有一种方法可以在没有循环的情况下将函数应用于 Pandas 数据框中的多个列?例如,给出这个数据框:

df = pd.DataFrame({'id': [1,2,3,4,5,6,7,8,9,10],
                   'val1': [2,2,np.nan,np.nan,4,1,np.nan,np.nan,np.nan,2],
                   'val2': [7,0.2,5,8,np.nan,1,0,np.nan,1,1],
                  })
display(df)

如果我想同时操作val1val2 列,我可以执行以下操作。是否有单行代码来代替 for 循环?

f = lambda x: 'ERR' if x < 5 else x
cols = ['val1', 'val2']
for c in cols:
    df[c] = df[c].apply(f) 
display(df)

【问题讨论】:

    标签: python pandas lambda apply


    【解决方案1】:

    applymap

    df.assign(**df[cols].applymap(f))
    
       id val1 val2
    0   1  ERR  7.0
    1   2  ERR  ERR
    2   3  NaN  5.0
    3   4  NaN  8.0
    4   5  ERR  NaN
    5   6  ERR  ERR
    6   7  NaN  ERR
    7   8  NaN  NaN
    8   9  NaN  ERR
    9  10  ERR  ERR
    

    mask

    df.assign(**df[cols].mask(df[cols] < 5, 'ERR'))
    
       id val1 val2
    0   1  ERR  7.0
    1   2  ERR  ERR
    2   3  NaN  5.0
    3   4  NaN  8.0
    4   5  ERR  NaN
    5   6  ERR  ERR
    6   7  NaN  ERR
    7   8  NaN  NaN
    8   9  NaN  ERR
    9  10  ERR  ERR
    

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多