根据行条件将变量列值设置为 nan

the*_*erd 2 python slice python-3.x pandas

我希望能够根据第一列的值可变地更改列值。

假设我有一个数据框,如下所示:

col_ind   col_1   col_2   col_3
    3       a       b       c
    2       d       e       f
    1       g       h       i  
Run Code Online (Sandbox Code Playgroud)

我实际上想做

df.loc[:, df.columns[-df['col_ind']:]] = np.nan
Run Code Online (Sandbox Code Playgroud)

这会导致:

col_ind   col_1   col_2   col_3
    3      nan     nan     nan
    2       d      nan     nan
    1       g       h      nan 
Run Code Online (Sandbox Code Playgroud)

Shu*_*rma 5

让我们使用广播来检查可以屏蔽的索引

c = df.columns[1:]
m = range(len(c), 0, -1) <= df['col_ind'].values[:, None]

df[c] = df[c].mask(m)
Run Code Online (Sandbox Code Playgroud)

结果

   col_ind col_1 col_2 col_3
0        3   NaN   NaN   NaN
1        2     d   NaN   NaN
2        1     g     h   NaN
Run Code Online (Sandbox Code Playgroud)