根据其他列中的多个条件更新列字符串值

Update a columns string value based on multiple criteria in other columns

如果 cust_username 是 'BOB'

,则希望用 "BOC" 更新字段 cust_cdr_display_name 中的任何零值
originating_system_id   ticker         cust_cdr_display_name    cust_username
BBT                     T 2 3/4 02/15/28    0                    BOB
BBT                     T 2 1/4 11/15/27    0                    BOB


originating_system_id   ticker         cust_cdr_display_name    cust_username
BBT                     T 2 3/4 02/15/28    BOC                  BOB
BBT                     T 2 1/4 11/15/27    BOC                  BOB

代码:

mask = df[(   
            df['cust_cdr_display_name'] == 0
          ) 
        & 
          (
            df['cust_username'] == 'BOB'
          )]      
df.loc[mask, 'cust_cdr_display_name'] = 'BOC' 

我遇到错误:

cannot copy sequence with size 40 to array axis with dimension 2

如何让掩码标准接受多个标准?

你很接近,需要在链式布尔掩码中省略 df[]

mask = (   
        df['cust_cdr_display_name'] == 0
       ) 
        & 
       (
        df['cust_username'] == 'BOB'
       )      

df <- 结构(列表(originating_system_id = c("BBT","BBT","BBT"), ticker = c("T 2 3/4 02/15/28","T 2 1/4 11/15/27","T 2 1/4 11/15/29"), cust_cdr_display_name = c(0, 0, 4),cust_username = c("BOB","BOB","BOB")), .Names = c("originating_system_id","ticker","cust_cdr_display_name","cust_username"), row.names = c(NA, -3L), class = "data.frame")

打印 df 如下所示。 df

originating_system_id 代码 cust_cdr_display_name cust_username

1 BBT T 2 3/4 02/15/28 0 BOB

2 BBT T 2 1/4 11/15/27 0 BOB

3 BBT T 2 1/4 11/15/29 4 BOB

它将检查所有 cust_cdr_display_name 为 0 的索引,并取 cust_username 的值并替换为相同的索引。

df$cust_cdr_display_name[df$cust_cdr_display_name == 0] <- df$cust_username[df$cust_cdr_display_name == 0]

输出:

originating_system_id 代码 cust_cdr_display_name cust_username

1 BBT T 2 3/4 02/15/28 BOB BOB

2 BBT T 2 1/4 11/15/27 BOB BOB

3 BBT T 2 1/4 11/15/29 4 BOB