【发布时间】:2022-06-20 06:45:18
【问题描述】:
我正在寻找我的数据框上的渐变模式,如下所示:
df.loc[(
(df['A'].shift(-0).lt(1.7)) &
(df['A'].shift(-1).lt(1.7)) &
(df['A'].shift(-2).lt(1.7)) &
(df['A'].shift(-3).lt(1.7)) &
(df['A'].shift(-4).lt(1.7)) &
(df['A'].shift(-5).lt(1.7)) &
]
后者将返回一个 df,其中 6 个先前的值小于 1.7,例如:
数据框将如下所示(之前和之后):
A
329 15.1252
330 13.1251
331 1.3125
332 1.5625
333 39.5625
346 45.6875
347 11.0000
348 11.0000
354 1.8125
355 1.8125
358 1.4375
359 1.4375
360 1.5000
361 1.5000
362 1.5000
363 1.5000
364 1.4375
365 1.4375
366 1.5000
A
364 1.4375
365 1.4375
366 1.5000
它有效,但我想改进它。我尝试了很多东西,我认为可能是这样的:
parameters = [
[0, 1.7],
[1, 1.7],
[2, 1.7],
[3, 1.7],
[4, 1.7],
[5, 1.7],
]
conditions = ([ ' & ' .join(['(df["A"].shift(-{0}).lt({1}))'.format(x[0], x[1]) for x in parameters])])
conditions = '(' + conditions ')'
df.loc[conditions]
似乎“条件”作为引号之间的字符串返回,字面意思是“条件”,所以 df.loc[conditions] 返回一个“KeyError”
是我在网站上的第一个问题。提前致谢。
【问题讨论】:
-
你能提供一个样本数据集和匹配的预期输出吗?
标签: python pandas iteration multiple-conditions pandas-loc