【发布时间】:2020-09-04 21:44:51
【问题描述】:
我正在尝试创建一个新的 Pandas 列,用于指示与上面的行和下面的行相比,一个数字是否最大。
该列将是二进制的,其中“1”表示它是与最后一行和下一行相比的最大数字,“0”表示不满足条件。
这是数据的样子:
Date High
0 2015-11-11 25.90
1 2015-11-12 27.12
2 2015-11-13 26.20
3 2015-11-16 26.19
4 2015-11-17 25.51
5 2015-11-18 26.31
6 2015-11-19 26.00
7 2015-11-20 27.01
8 2015-11-23 25.60
9 2015-11-24 27.00
10 2015-11-25 26.49
这是我想要的结果:
Date High higher
0 2015-11-11 25.90 0.0
1 2015-11-12 27.12 1.0
2 2015-11-13 26.20 0.0
3 2015-11-16 26.19 0.0
4 2015-11-17 25.51 0.0
5 2015-11-18 26.31 1.0
6 2015-11-19 26.00 0.0
7 2015-11-20 27.01 1.0
8 2015-11-23 25.60 0.0
9 2015-11-24 27.00 1.0
10 2015-11-25 26.49 0.0
为了进一步说明,这是我在 Microsoft Excel 上所做的,这正是我试图用 Python 实现的: ExcelExample
第一次尝试:
for i in dftest['High']:
if dftest['High'][i] > dftest['High'][i-1] and dftest['High'][i] > dftest['High'][i+1]:
dftest['higher'] = 1
else:
dftest['higher'] = 0
这会导致错误: “TypeError:无法使用类‘float’的这些索引器[25.9]对类‘pandas.core.indexes.range.RangeIndex’进行标签索引”
第二次尝试: 这里我尝试使用'.shift()'。
for i in dftest['High']:
if dftest['High'] > dftest['High'].shift(1) and dftest['High'] > dftest['High'].shift(-1):
dftest['higher'] = 1
else:
dftest['higher'] = 0
这会导致错误: “TypeError: &: 'float' 和 'float' 不支持的操作数类型”
第三次尝试(类似于第二次尝试): 使用 '&' 运算符而不是 'and'。
导致错误: “TypeError:无法使用类‘float’的这些索引器[25.9]对类‘pandas.core.indexes.range.RangeIndex’进行标签索引”
将不胜感激任何形式的帮助!
编辑:如果我想找到 5 个或 7 个或 9 个连续数字中的最高值,如果提供的解决方案可以轻松交替,我将不胜感激。再次感谢!
【问题讨论】:
标签: python python-3.x pandas dataframe conditional-statements