python - 使用具有多个条件的逻辑向 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)
解决方案
下面的代码会帮助你:
df['bool'] = (5 <= df['sum']) and (df['sum'] <= 10)
在将相同的值与您需要输入的 2 个条件进行比较时and
推荐阅读
- maven - 有没有办法通过上传脚本来生成 pom.xml?
- node.js - 如何将数据传递给部分(Express,ejs)?
- javascript - Laravel Livewire:jQuery 在通过 @if 语句加载的子组件中不起作用 - 已解决
- ruby-on-rails - Docker:配置 solr 以便它与本地运行的数据库连接,而不是在 docker 上?
- kubernetes - 如何在 EKS Fargate 中挂载 Docker.sock?
- kotlin - 如何在 kotlin 的布局文件中绑定来自内部数据类的变量?
- macos - MacOS Catalina 上的 GraalVM
- c# - 在托管服务中注入现有记录器
- oauth-2.0 - 带有刷新令牌的 Google Oauth2 服务器端流程 java
- c# - 如何将字符串格式的不同日期转换为特定格式,如 YYYYMMDD