我正在尝试编写一个函数并将其应用于 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
