将Python函数应用于多个列

将Python函数应用于多个列,python,pandas,Python,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 func

我正在尝试编写一个函数,并将其应用于数据帧中的多个字段。 该函数接受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']
但这也带来了: ValueError:(“序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all().,“发生在索引colA1上”)

这应该可以做到

df.apply(lambda x: pd.Series([function(x['colA1']),function(x['colA2']),function(x['colA3'])]), axis=1).rename({0:'colA1',1:'colA2',2:'colA3'}, axis=1)
输出

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

4如果这真的是你想要做的,一个更快的选择是:


colA1 colA2 colA3
0   10   > 10
1   10
3   > 10   > 10   > 10

4也不要使用
dict
作为字典名,因为它会覆盖内置的python
dict
func。
df.apply(lambda x: pd.Series([function(x['colA1']),function(x['colA2']),function(x['colA3'])]), axis=1).rename({0:'colA1',1:'colA2',2:'colA3'}, axis=1)
   colA1  colA2  colA3
0  <= 10   > 10   > 10
1  <= 10  <= 10   > 10
2  <= 10   > 10   > 10
3   > 10   > 10   > 10
4  <= 10  <= 10  <= 10
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[['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