【问题标题】:Update column value based on value in other column根据其他列中的值更新列值
【发布时间】:2021-10-19 13:34:27
【问题描述】:

我指的是this thread。我想根据另一列中的值更新列值。

name_list = ['C', 'E']
df = pd.DataFrame([('A', 'buy'),
                  ('B', 'sell'),
                  ('C', 'hold'),
                  ('D', 'loan'),
                  ('E', 'hold')], columns=['name', 'action'])
    name     action
1    A          buy
2    B          sell           
3    C          hold
4    D          loan
5    E          hold

这是我想出的两个尝试:

df['action'] = df.apply(lambda x: 'removed' if x['name'] in name_list else df['action'])
df['action'] = df.apply(lambda x: 'removed' if x['name'].isin(name_list) else df['action'])

以上两次尝试都会出现此错误KeyError: 'name' 预期的输出是

    name     action
1    A          buy
2    B          sell           
3    C          removed
4    D          loan
5    E          removed

我做错了什么?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    只需使用 loc:

    df.loc[df['name'].isin(name_list),'action']='removed'
    

    对于您当前的方法,通过 axis=1 但在这种简单情况下使用 apply() 很慢:

    df['action'] = df.apply(lambda x: 'removed' if x['name'] in name_list else x['action'],axis=1)
    

    df的输出:

        name    action
    0   A       buy
    1   B       sell
    2   C       removed
    3   D       loan
    4   E       removed
    

    注意:您也可以使用np.where()np.where(df['name'].isin(name_list),'removed',df['action'])

    【讨论】:

      【解决方案2】:

      使用df.where-

      df['action'] = df['action'].where(~df['name'].isin(name_list), 'removed')
      

      输出

      0        buy
      1       sell
      2    removed
      3       loan
      4    removed
      Name: action, dtype: object
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        相关资源
        最近更新 更多