使用While循环时数列真值不明确

2024-03-29 02:16:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题以前确实被问过很多种形式,但是,我还没有找到一个包含多个串联输入以及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循环是必要的。我想避免在这里一排一排地走。

期望输出:

100, 100, 100

任何帮助,澄清,或有效的方式来取得进展,在此将不胜感激。你知道吗


Tags: to函数in元素foritememptyseries
2条回答

尝试对序列应用逻辑关系时会出现此错误。您可以对序列中的一个元素执行此操作。因此,使用循环,从序列中提取一个元素,并按元素应用while条件。希望这有帮助!你知道吗

您正在将序列与标量值进行比较。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})))

相关问题 更多 >