python - pandas df列中的布尔函数-面向对象-系列的模棱两可的真值
问题描述
我需要一些帮助来创建一个包含布尔函数的数据框列。我想根据有关其他 df 列数据的条件接收 True 或 False 值。
数据框:
date C A
0 2020-02-04 3284.75 3284.75
1 2020-02-05 3322.25 3303.50
2 2020-02-06 3333.25 3327.75
3 2020-02-07 3315.50 3324.38
4 2020-02-10 3340.25 3327.88
5 2020-02-11 3345.50 3342.88
6 2020-02-12 3367.00 3356.25
7 2020-02-13 3363.50 3365.25
8 2020-02-14 3368.25 3365.88
这是功能:
def func(C, A):
for i in range(3):
if C.shift(i) >= A.shift(i):
j + 1
if j == 3:
val = True
else:
val = False
return val
我在这里调用函数:
data['Func'] = data.apply(func(data['C'], data['A']), axis=1)
我在这个例子中得到的错误是
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
我试图让它工作的最常见的错误是
TypeError: 'DatetimeIndex' object is not callable
和
AttributeError: ("'numpy.float64' object has no attribute 'shift'",
在这一点上,我不确定哪些元素有效或无效。任何帮助,将不胜感激。提前致谢。
解决方案
- Row-wise
.apply
就像一个 Glorifiedfor-loop
,这意味着C
和A
在你的函数中每个都等于一个值,而不是一个系列。因此shift
将不起作用。 - 你可以试试
np.where
- 预期的输出并不完全清楚,所以希望这会让你走上正轨。
import numpy as np
df['Func'] = np.where((df.C.shift(0) >= df.A.shift(0)) & (df.C.shift(1) >= df.A.shift(1)) & (df.C.shift(2) >= df.A.shift(2)), True, False)
display(df)
C A Func
3284.75 3284.75 False
3322.25 3303.50 False
3333.25 3327.75 True
3315.50 3324.38 False
3340.25 3327.88 False
3345.50 3342.88 False
3367.00 3356.25 True
3363.50 3365.25 False
3368.25 3365.88 False
解释
- 对于每一行,每个条件都必须
True
是Func
True
shift(0)
df.C.shift(0) >= df.A.shift(0)
date
2020-02-04 True
2020-02-05 True
2020-02-06 True
2020-02-07 False
2020-02-10 True
2020-02-11 True
2020-02-12 True
2020-02-13 False
2020-02-14 True
shift(1)
df.C.shift(1) >= df.A.shift(1)
date
2020-02-04 False
2020-02-05 True
2020-02-06 True
2020-02-07 True
2020-02-10 False
2020-02-11 True
2020-02-12 True
2020-02-13 True
2020-02-14 False
shift(2)
df.C.shift(2) >= df.A.shift(2)
date
2020-02-04 False
2020-02-05 False
2020-02-06 True
2020-02-07 True
2020-02-10 True
2020-02-11 False
2020-02-12 True
2020-02-13 True
2020-02-14 True
推荐阅读
- webpack - terser-webpack-plugin 在另一台机器上生成不同的输出
- dictionary - 使用 Ansible 将嵌套字典展平为键/值对
- sql - 创建显示日期和日期之间的用户计数的视图
- html - 页脚的大小与其内容无关。(HTML、CSS)
- apache-spark - pyspark中的有效累积枢轴
- javascript - 我的按键事件可能有什么问题?
- r - 如何在R中订购日期?
- c# - 使用 count(*) 查询计算总数时出现错误,但出现“值不能为空参数名称数据表”的错误
- java - 我想在处置之前保存我在 jframe 上所做的更改
- c - 二进制输出是否应该与 ASCII 输入相同?