Encountering ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
Encountering ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
我有一个功能
def cruise_fun(speed, accl, acmx, dcmx):
count = 0
index = []
for i in range(len(speed.dropna())):
if ((speed[i]>40) & (accl[i]<acmx*0.2) & (accl[i]>dcmx*0.2)):
count +=1
index.append(i)
return count, index
在以下语句中调用此函数
cruise_t_all, index_all =cruise_fun(all_data_speed[0], acc_val_all[0], acc_max_all, decc_max_all)
all_data_speed
和 acc_val_all
是 1 列和 38287 行的两个数据帧。 acc_max_all
和 decc_max_all
是两个 float64 值。我已尝试尽可能多地实施 Whosebug 中提供的解决方案。 and
和 &
我都用过。我无法解决这个问题。
您使用 pandas 的方式有误。你不应该像你一样遍历所有行。您可以连接提供的列,然后检查条件:
def cruise_fun(speed, accl, acmx, dcmx):
df = pd.concat([speed.dropna(), accl], axis=1)
df.columns = ["speed", "accl"]
mask = (df["speed"] > 40) & df["accl"].between(dcmx * .2, acmx * .2, inclusive=False)
return mask.sum(), df[mask].index
注意:我做出的一些假设:
- 我假设您的列名没有冲突,否则
concat
将不起作用,您需要先重命名您的列
- 我假设
speed.dropna()
和 accl
的索引匹配,但如果不是这样我也不会感到惊讶。您应该确保这很好,或者更好:将所有内容存储在同一个数据框中
我有一个功能
def cruise_fun(speed, accl, acmx, dcmx):
count = 0
index = []
for i in range(len(speed.dropna())):
if ((speed[i]>40) & (accl[i]<acmx*0.2) & (accl[i]>dcmx*0.2)):
count +=1
index.append(i)
return count, index
在以下语句中调用此函数
cruise_t_all, index_all =cruise_fun(all_data_speed[0], acc_val_all[0], acc_max_all, decc_max_all)
all_data_speed
和 acc_val_all
是 1 列和 38287 行的两个数据帧。 acc_max_all
和 decc_max_all
是两个 float64 值。我已尝试尽可能多地实施 Whosebug 中提供的解决方案。 and
和 &
我都用过。我无法解决这个问题。
您使用 pandas 的方式有误。你不应该像你一样遍历所有行。您可以连接提供的列,然后检查条件:
def cruise_fun(speed, accl, acmx, dcmx):
df = pd.concat([speed.dropna(), accl], axis=1)
df.columns = ["speed", "accl"]
mask = (df["speed"] > 40) & df["accl"].between(dcmx * .2, acmx * .2, inclusive=False)
return mask.sum(), df[mask].index
注意:我做出的一些假设:
- 我假设您的列名没有冲突,否则
concat
将不起作用,您需要先重命名您的列 - 我假设
speed.dropna()
和accl
的索引匹配,但如果不是这样我也不会感到惊讶。您应该确保这很好,或者更好:将所有内容存储在同一个数据框中