Skip to main content
 首页 » 编程设计

python之根据多个条件替换 Pandas 数据框中的值

2025年05月04日19bluestorm

我有一个基于此示例代码的相当简单的问题:

x1 = 10*np.random.randn(10,3) 
df1 = pd.DataFrame(x1) 

我正在寻找从 df1 派生的单个 DataFrame,其中正值替换为 "up",负值替换为 "down" 和 0 值(如果有)替换为 “零”。我尝试使用 .where() 和 .mask() 方法,但无法获得所需的结果。

我看到其他帖子一次根据多个条件进行过滤,但他们没有显示如何根据不同条件替换值。

请您参考如下方法:

对于多个条件,即。 (df['employrate'] <=55) & (df['employrate'] > 50)

使用这个:

df['employrate'] = np.where( 
   (df['employrate'] <=55) & (df['employrate'] > 50) , 11, df['employrate'] 
   ) 

或者你也可以这样做,

gm.loc[(gm['employrate'] <55) & (gm['employrate'] > 50),'employrate']=11 

这里的非正式语法可以是:

<dataset>.loc[<filter1> & (<filter2>),'<variable>']='<value>' 

out[108]: 
       country  employrate alcconsumption 
0  Afghanistan   55.700001            .03 
1      Albania   11.000000           7.29 
2      Algeria   11.000000            .69 
3      Andorra         nan          10.17 
4       Angola   75.699997           5.57 

因此我们在这里使用的语法是:

 df['<column_name>'] = np.where((<filter 1> ) & (<filter 2>) , <new value>, df['column_name']) 

对于单一条件,即。 ( 'employrate'] > 70 )

       country        employrate alcconsumption 
0  Afghanistan  55.7000007629394            .03 
1      Albania  51.4000015258789           7.29 
2      Algeria              50.5            .69 
3      Andorra                            10.17 
4       Angola  75.6999969482422           5.57 

使用这个:

df.loc[df['employrate'] > 70, 'employrate'] = 7 

       country  employrate alcconsumption 
0  Afghanistan   55.700001            .03 
1      Albania   51.400002           7.29 
2      Algeria   50.500000            .69 
3      Andorra         nan          10.17 
4       Angola    7.000000           5.57 

因此这里的语法是:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]