将Python函数应用于多列

2024-06-02 00:41:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 数据函数dfreturnfunction语句条件dict
2条回答

这应该够了

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

相关问题 更多 >