我正在使用apply函数处理name1列。我可以将像8这样的fix值传递到函数中,但是我希望使用来自每一行的值(num_of_bit)来处理name1列。当我使用下面的代码时,我会得到错误。我明白为什么我会犯这个错误,但我不知道如何实现我想要的。
def signedProcessing(input,num_of_bit):
if input < (2**num_of_bit)/2:
input += 256
return input
out_df.loc[out_df['range_type'] == "SIGNED", [name1]] = out_df[out_df['range_type']=="SIGNED"][name1].apply(signedProcessing,num_of_bit=out_df[out_df['range_type'] == "SIGNED"]['num_of_bit'])系列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all().
发布于 2020-09-12 10:35:14
如果我正确地理解了这个问题,并且您需要通过应用函数来更改'name1‘值,其中'range_type’是‘签名’的‘,那么您就没有传递'num_of_bit’来应用,所以它尝试对每一行使用整个列。我建议使用lambda函数:
out_df.loc['name1'] = out_df[['name1', 'num_of_bit', 'range_type']].apply(lambda x: signedProcessing(x.name1, x.num_of_bits) if x.range_type=='SIGNED' else x.name1, axis=1)这将将具有“签名”name1的行的“range_type”值更改为signedProcessing(name1的值,num_of_bits的值)。如果range_type是其他东西,它不会更改name1值。
https://stackoverflow.com/questions/63857428
复制相似问题