Python Pandas 以系列数据为参数应用函数

Python Pandas apply function with series data as argument

我正在使用应用函数来处理 name1 列。我可以将像 8 这样的固定值传递给函数,但我希望使用每一行的值 (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'])

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

如果我正确理解问题并且您需要通过应用函数更改 'name1' 值,其中 'range_type' 为 'SIGNED',那么您没有传递 '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)

这会将具有 'SIGNED' range_type 的每一行的 'name1' 值更改为 signedProcessing(name1 的值,num_of_bits 的值)。如果 range_type 是别的东西,它不会改变 name1 的值。