Python 使用While循环时序列的真值不明确

Python 使用While循环时序列的真值不明确,python,pandas,dataframe,Python,Pandas,Dataframe,这个问题以前肯定以多种形式被问过,但是,我还没有找到一个包含多个串联输入以及while循环的问题。因此,我的问题是: 在while循环之前不需要for循环,是否可以从该函数输出一个系列: def modify_to_100(first, second): combined = first + second while combined != 100: combined += 1 return abs(combined) 我正在将多个熊猫系列传递给函数

这个问题以前肯定以多种形式被问过,但是,我还没有找到一个包含多个串联输入以及while循环的问题。因此,我的问题是:

在while循环之前不需要for循环,是否可以从该函数输出一个系列:

def modify_to_100(first, second):
    combined = first + second

    while combined != 100:
        combined += 1

    return abs(combined)
我正在将多个熊猫系列传递给函数。系列的长度总是相同的

In [132]: first = pd.Series([50, 60, 40])
In [133]: second = pd.Series([20, 10, 40])
In [134]: modify_to_100(first,second)
我得到的错误-这是相当描述性和可理解的。然而,由于该系列的每个元素将需要不同数量的循环,我不知道处理这种情况的最佳方法

Out [134]: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
例如,我尝试了
a.all()
,正如预期的那样,这会导致循环永远运行。永远不会有一段时间,所有()的数字加上1,同时达到100

其他的
a.empty()、a.bool()、a.item()、a.any()
似乎不适用。我是否误解了其中的一个因素,这可能会让系列的每一个元素都各自进步

到目前为止,我所发现的一切都表明,for循环是必要的我不想在这里一排一排地走。

def modify_to_100(first, second):
    combined = first + second

    while combined != 100:
        combined += 1

    return abs(combined)
期望输出:

100, 100, 100

任何帮助、澄清或有效的进展方式都将不胜感激

尝试对序列应用逻辑关系时会出现此错误。您可以为系列的一个元素执行此操作。因此,使用一个循环,从序列中提取一个元素,并应用
while
condition element-wise。希望这有帮助

您正在将一个序列与标量值进行比较。combine是一个系列,而100是一个数值

您可以将序列转换为数据帧并传递到函数中

def modify_to_100(df):

    df['new'] = df['first'] + df['second']
    # df['new'] = np.where(df['new']!=100, 100, df['new'])
    while True:
        if all(df['new'].eq(100)):
            break
        df[df['new']<100] = df['new']+1

    return df['new'].values

first = pd.Series([50, 60, 40])
second = pd.Series([20, 10, 40])

print(modify_to_100(pd.DataFrame({'first':first.values, 'second':second.values})))
def将_修改为_100(df):
df['new']=df['first']+df['second']
#df['new']=np.其中(df['new']!=100100,df['new']))
尽管如此:
如果全部(df['new'].eq(100)):
打破

df[df['new']我知道你要做什么。我正在努力适应我的用例。我特别需要迭代性质(组合+1)while循环的.np.where在这里不起作用。你能在你的问题中解释一下,
combine+1
计算结果是什么吗?据我所知,它将生成输出
71、71、81
它将在第一次迭代时计算这些数字,但因为(while!=100)它将再次计算。
72、72、81
73、73、82
,等等。我希望前两个元素在30次迭代后停止,第三个元素在20次迭代后停止。从而在每个元素上达到
100
。编辑后的问题更简洁/与(组合+=1)类似我认为这很接近。我将进行适当的调整和测试。我会让你知道我的发现。我最终不得不使用for循环。在这种情况下,我没有修改函数本身,而是通过for循环将元素传递给它。