首页 > 解决方案 > 比较数据帧的值是否大于给定值

问题描述

我有一个数据框,其中有一列中的值。如果这些值超过 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().

谢谢!

标签: pythonpandas

解决方案


您的解决方案失败了,因为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"])
  1. 您可以使用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
  1. 或者,正如@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

推荐阅读