Skip to main content
 首页 » 编程设计

python之将 Python 函数应用于多个 Pandas 列

2025年05月04日20Free-Thinker

我正在尝试编写一个函数并将其应用于 pandas 数据框中的多个字段。 该函数获取列 colA1,并根据条件语句为新列 colB2 赋值。 如果给出单列,则此函数有效,例如colA1,但是我怎么能写它来遍历一个 列列表,返回相应数量的新列?

以下函数适用于单个列:

dict = {'colA1':[2,6,8,28,5],  
    'colA2': [38,6,14,63,3],  
    'colA3':[90,40,80,98,3]}  
 
df = pd.DataFrame(dict)  
 
def function(x): 
    if x <= 10: 
        return '<= 10' 
    elif x > 10: 
        return '> 10'  
 
df['colB1']=df['colA1'].apply(function) 
 
df['colB1'] 

返回:

0    <= 10 
1    <= 10 
2    <= 10 
3    > 10 
4    <= 10 

我试图将它应用于多个列,如下所示: Update Multiple Columns using Pandas Apply Function

df[['colB1', 'colB2', 'colB3']]=df[['colA1', 'colA2', 'colA3']].apply(function) 

但这会返回: ValueError: ('Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。', '发生在索引 colA1' )

请您参考如下方法:

如果这确实是您想要做的,更快的选择是 np.select() :

cond=[df<= 10,df > 10] 
choice=['<= 10','> 10' ] 
df[:]=np.select(cond,choice) 
print(df) 

   colA1  colA2  colA3 
0  <= 10   > 10   > 10 
1  <= 10  <= 10   > 10 
2  <= 10   > 10   > 10 
3   > 10   > 10   > 10 
4  <= 10  <= 10  <= 10 

您也可以尝试使用 df.applymap()为您的功能:

df[['colA1','colA2','colA3']].applymap(function) 
#df.applymap(function) 

   colA1  colA2  colA3 
0  <= 10   > 10   > 10 
1  <= 10  <= 10   > 10 
2  <= 10   > 10   > 10 
3   > 10   > 10   > 10 
4  <= 10  <= 10  <= 10