首页 > 解决方案 > 使用具有多个条件的逻辑向 pandas DataFrame 添加列

问题描述

我正在尝试将一列添加到具有布尔值的熊猫数据框中,如果同一行中不同列中的数字介于两个值之间,则为 True。

df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
                  index=['row1', 'row2', 'row3'],
                  columns=['a', 'b'])


def add_subtract_list(a, b):
  return [a + b, a - b]


df[['sum', 'difference']] = df.apply(
    lambda row: add_subtract_list(row['a'], row['b']), axis=1)

df['bool'] = 5 <= df['sum'] <= 10

我收到以下错误:

Traceback (most recent call last):
  File "G:/My Drive/School/allele_segregation_analysis/test.py", line 15, in <module>
    df['bool'] = pd.Series(5 <= df['sum'] <= 10)
  File "C:\Users\Gal\PycharmProjects\venv\lib\site-packages\pandas\core\generic.py", line 1330, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

如果是以下一种情况:

df['bool'] = df['sum'] <= 10

它完美地工作。如何设置多个逻辑条件?

更新:使用两个单独的条件并在它们之间使用“&”而不是“和”似乎有效。不知道有什么区别,但我猜问题解决了。

df['bool'] = (5 <= df['sum']) & (df['sum'] <= 10)

标签: pythonpandas

解决方案


下面的代码会帮助你:

df['bool'] = (5 <= df['sum']) and (df['sum'] <= 10)

在将相同的值与您需要输入的 2 个条件进行比较时and


推荐阅读