python - 比较数据帧的值是否大于给定值
问题描述
我有一个数据框,其中有一列中的值。如果这些值超过 6.4,我需要计算另一列的值。我怎样才能做到这一点?这是我试图执行的代码:
if df['MAG'] >= 6.4:
df['timeWindow'] = 10 ** 0.032 * df['MAG'] + 2.7389
else:
df['timeWindow'] = 10 ** 0.5409 * df['MAG'] - 0.547
我收到此错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(),
a.item(), a.any() or a.all().
谢谢!
解决方案
您的解决方案失败了,因为df['MAG'] >= 6.4
返回的 a与多个布尔值pd.Series
的大小相同df['MAG']
,而不仅仅是一个。因此,歧义,因此错误。您需要同时检查并为两者'MAG'
创建新值。timeWindow
请参阅以下内容:
启动一个新的 DataFrame:
import pandas as pd
df = pd.DataFrame([5.3, 4.2, 7.8, 9.2], columns=["MAG"])
- 您可以使用
pd.Series.apply()
它不需要任何外部库:
df["timeWindow"] = df.MAG.apply(
lambda x: x * (10 ** 0.032) + 2.7389 if x >= 6.4
else x * (10 ** 0.5409) - 0.547
)
print(df)
# MAG timeWindow
# 0 5.3 17.868176
# 1 4.2 14.046158
# 2 7.8 11.135329
# 3 9.2 12.642380
- 或者,正如@Quang Hoang 所建议的,您也可以使用
np.where()
:
import numpy as np
df["timeWindow"] = np.where(
df.MAG >= 6.4,
df.MAG * (10 ** 0.032) + 2.7389,
df.MAG * (10 ** 0.5409) - 0.547
)
print(df)
# MAG timeWindow
# 0 5.3 17.868176
# 1 4.2 14.046158
# 2 7.8 11.135329
# 3 9.2 12.642380
推荐阅读
- sql - 比较列和重复数据删除
- java - 通过子字符串在 selenium 中查找元素
- testing - 您可以使用 cypress 测试 Teams 应用程序吗?
- plot - Pine Script 中的抵消地块价格交叉地块价格
- python - 正则表达式负前瞻(python)
- javascript - 从 localhost Vue 项目调用 api 时出现 NodeJS CORS 错误
- laravel - Livewire 电线:点击,电线:模型不工作
- swift - 所有内置 xcode 的应用程序都因“终止原因:命名空间代码设计,代码 0x1”而崩溃
- javascript - Fabric JS组选择和缩放弄乱了单个对象的位置属性
- kdb - 从另一个命名空间访问 kdb 表