将Python函数应用于多个列
我正在尝试编写一个函数,并将其应用于数据帧中的多个字段。 该函数接受colA1列,并根据条件语句为新列colB2赋值。 如果给定了单个列(例如colA1),则此函数可以工作,但是如何编写它来迭代 列列表,返回相应数量的新列 以下函数适用于单个列:将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
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
作为字典名,因为它会覆盖内置的pythondict
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