- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
概览
我正在处理一个数据框,其中 df["Pivots"]
只要之前由锯齿形指标识别出高点或低点,它就会在 1 和 -1 之间交替。
我正在尝试在数据帧上使用 Pandas 实现以下内容,并在 df["Pivots"]
时修改相关行之前(错误地)被分配了一个值 1
这标志着一个高,但另一行实际上有更高的 High
值(value)。
请参阅下面的屏幕截图,以直观地表示数据和所需的输出。
伪代码
df["Pivots"]
中有 -1df["Pivots"]
中的最后一个枢轴值这将是一个 1df.High
在rows_between > df["Pivot Price"]
在当前行中,actual_high 是 df[High].max()
在行之间。df["Pivots"]
中删除 1 & 值(value)来自 df["Pivot Price"]
在当前行并将其添加到 df["Pivots"]
& df["Pivot Price"]
在 actual_high 的行中df.High
成行
2023-10-08
实际_高且高于
df["Pivot Price"]
在行
2023-09-24
.
df.to_dict()
{'Open': {Timestamp('2023-09-24 00:00:00', freq='W-SUN'): 1.0427,
Timestamp('2023-10-01 00:00:00', freq='W-SUN'): 1.0586,
Timestamp('2023-10-08 00:00:00', freq='W-SUN'): 1.0314,
Timestamp('2023-10-15 00:00:00', freq='W-SUN'): 1.0669,
Timestamp('2023-10-22 00:00:00', freq='W-SUN'): 1.0058,
Timestamp('2023-10-29 00:00:00', freq='W-SUN'): 0.9966},
'High': {Timestamp('2023-09-24 00:00:00', freq='W-SUN'): 1.0621,
Timestamp('2023-10-01 00:00:00', freq='W-SUN'): 1.0609,
Timestamp('2023-10-08 00:00:00', freq='W-SUN'): 1.0714,
Timestamp('2023-10-15 00:00:00', freq='W-SUN'): 1.0679,
Timestamp('2023-10-22 00:00:00', freq='W-SUN'): 1.0198,
Timestamp('2023-10-29 00:00:00', freq='W-SUN'): 0.9966},
'Low': {Timestamp('2023-09-24 00:00:00', freq='W-SUN'): 1.0383,
Timestamp('2023-10-01 00:00:00', freq='W-SUN'): 1.0297,
Timestamp('2023-10-08 00:00:00', freq='W-SUN'): 1.0285,
Timestamp('2023-10-15 00:00:00', freq='W-SUN'): 1.004,
Timestamp('2023-10-22 00:00:00', freq='W-SUN'): 0.9941,
Timestamp('2023-10-29 00:00:00', freq='W-SUN'): 0.938},
'Close': {Timestamp('2023-09-24 00:00:00', freq='W-SUN'): 1.0577,
Timestamp('2023-10-01 00:00:00', freq='W-SUN'): 1.0297,
Timestamp('2023-10-08 00:00:00', freq='W-SUN'): 1.0666,
Timestamp('2023-10-15 00:00:00', freq='W-SUN'): 1.0053,
Timestamp('2023-10-22 00:00:00', freq='W-SUN'): 0.9988,
Timestamp('2023-10-29 00:00:00', freq='W-SUN'): 0.9528},
'Pivots': {Timestamp('2023-09-24 00:00:00', freq='W-SUN'): 1,
Timestamp('2023-10-01 00:00:00', freq='W-SUN'): 0,
Timestamp('2023-10-08 00:00:00', freq='W-SUN'): 0,
Timestamp('2023-10-15 00:00:00', freq='W-SUN'): 0,
Timestamp('2023-10-22 00:00:00', freq='W-SUN'): 0,
Timestamp('2023-10-29 00:00:00', freq='W-SUN'): -1},
'Pivot Price': {Timestamp('2023-09-24 00:00:00', freq='W-SUN'): 1.0621,
Timestamp('2023-10-01 00:00:00', freq='W-SUN'): nan,
Timestamp('2023-10-08 00:00:00', freq='W-SUN'): nan,
Timestamp('2023-10-15 00:00:00', freq='W-SUN'): nan,
Timestamp('2023-10-22 00:00:00', freq='W-SUN'): nan,
Timestamp('2023-10-29 00:00:00', freq='W-SUN'): 0.938},
'Date': {Timestamp('2023-09-24 00:00:00', freq='W-SUN'): Timestamp('2023-09-24 00:00:00'),
Timestamp('2023-10-01 00:00:00', freq='W-SUN'): Timestamp('2023-10-01 00:00:00'),
Timestamp('2023-10-08 00:00:00', freq='W-SUN'): Timestamp('2023-10-08 00:00:00'),
Timestamp('2023-10-15 00:00:00', freq='W-SUN'): Timestamp('2023-10-15 00:00:00'),
Timestamp('2023-10-22 00:00:00', freq='W-SUN'): Timestamp('2023-10-22 00:00:00'),
Timestamp('2023-10-29 00:00:00', freq='W-SUN'): Timestamp('2023-10-29 00:00:00')}}
供引用,
this是生成这些枢轴的代码。
最佳答案
我想不出使用 .apply()
的简短解决方案,但通过一些辅助功能,您可以使用以下代码解决问题:
import numpy as np
def get_highs_idx(df):
return df[df['Pivots'] == 1].index.tolist()
def get_lows_idx(df):
return df[df['Pivots'] == -1].index.tolist()
def get_previous_high_idx(df, low_idx):
highs_idx = get_highs_idx(df)
for high_idx in reversed(highs_idx):
if high_idx < low_idx:
return high_idx
return None
def reset_pivot(df, old_high_idx, new_high_idx):
df.loc[old_high_idx, 'Pivots'] = 0
df.loc[old_high_idx, 'Pivot Price'] = np.nan
df.loc[new_high_idx, 'Pivots'] = 1
df.loc[new_high_idx, 'Pivot Price'] = df.loc[new_high_idx, 'High']
def correct_highs(df):
lows_idx = get_lows_idx(df)
for low_idx in lows_idx:
high_idx = get_previous_high_idx(df, low_idx)
if high_idx is not None:
new_high_idx = df.loc[high_idx:low_idx, 'High'].idxmax()
if high_idx != new_high_idx:
reset_pivot(df, high_idx, new_high_idx)
correct_highs(df)
代码可能会减少一点,但我认为这种方式更清晰。
def get_previous_low_idx(df, high_idx):
lows_idx= get_lows_idx(df)
for low_idx in reversed(lows_idx):
if low_idx < high_idx:
return low_idx
return None
def reset_low_pivot(df, old_low_idx, new_low_idx):
df.loc[old_low_idx, 'Pivots'] = 0
df.loc[old_low_idx, 'Pivot Price'] = np.nan
df.loc[new_low_idx, 'Pivots'] = -1
df.loc[new_low_idx, 'Pivot Price'] = df.loc[new_low_idx, 'Low']
def correct_lows(df):
highs_idx = get_highs_idx(df)
for high_idx in highs_idx:
low_idx = get_previous_low_idx(df, high_idx)
if low_idx is not None:
new_low_idx = df.loc[low_idx:high_idx, 'Low'].idxmin()
if low_idx != new_low_idx:
reset_low_pivot(df, low_idx, new_low_idx)
correct_lows(df)
我不想影响原始答案,但您可能想重命名
reset_pivot
至
reset_high_pivot
为了一致性。
def correct_pivots(df):
correct_highs(df)
correct_lows(df)
关于python - 使用 df.apply 或 Pandas 中的类似方法修改行值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66797797/
努力理解标题中 5 个示例之间的区别。系列与数据框有一些用例吗?什么时候应该使用一个而不是另一个?哪些是等价的? 最佳答案 df[x] — 使用变量 x 索引列。返回 pd.Series df[[x]
在使用Jupyter Notebook时,我必须为问题标题中提到的df.info()、df.head()等单独留出空格. 有没有办法像第二张图片那样把所有这些都放在一个 block 中,并显示所有信息
我想求三列之和,我采取的方法如下: In [14]: a_pd = pd.DataFrame({'a': np.arange(3), 'b': [5, 7,
我想我们大多数人已经使用过这样的东西(至少如果你正在使用 tidyverse): library(tidyverse) example % select(- mpg) 我的问题: 我知道这部分有一
我有一个 DF,里面有大约 20,000 行。我构建了一个 Python 脚本来对这些数据(包括数据透视表)运行大量清理和数学运算。 我想将此 DF 拆分为 3 个独立的 DF,然后根据列值将这 3
我什至不知道如何表达这一点,但在 Python 中有没有一种方法可以引用等号之前的文本,而无需实际再次编写? ** 编辑 - 我在 Jupyter 中使用 python3 我似乎用了半辈子的时间来写作
在 df1 中,每个单元格值都是我想要从 df2 中获取的行的索引。 我想获取 df2 trial_ms 列中行的信息,然后根据获取的 df2 列重命名 df1 中的列。 可重现的 DF: # df1
我想转换此表 0 thg John 3.0 1 thg James 4.0 2 mol NaN 5.0 3 mol NaN NaN 4
我有一个数据框,我想从中提取 val 中的值大于 15 以及 val 不是 NA: df[ !is.na(df$val) & df$val > 15, ] 由于我假设在 R 中经常需要这样的比较,所
鉴于 coming deprecation of df.ix[...] 如何替换这段代码中的 .ix? df_1 = df.ix[:, :datetime.time(16, 50)] d
任何我可以帮助我说出 Pandas 中这两个语句之间的区别-python df.where(df['colname'] == value) 和 df[(df['colname'] == value)]
考虑 df Index A B C 0 20161001 0 24.5 1 20161001 3 26.5 2
所以我需要按“fh_status”列对行进行分组,然后对每个组执行“gini”的最小值、平均值和最大值(将有三个)。我想出了这段代码: m = (df2.groupby(['fh_status']).
我尝试计算不同公司/股票的一些 KPI。我的股票信息位于 df 中,具有以下结构 Ticker Open High Low Ad
我有一个看起来像这样的 df: gene ID Probe ID Chromosome Start Stop 1: H3F3A 539154271
nn_idx_df 包含与 xyz_df 的索引匹配的索引值。如何从 xyz_df 中的 H 列获取值并在 nn_idx_df 中创建新列以匹配 output_df 中所示的结果。我可以解决这个问题,
我目前的 DF 看起来像这样 Combinations Count 1 ('IDLY', 'VADA') 3734 6 ('DOSA', 'IDLY')
我看到了几个与此相关的问题,但我发现这些技巧都不起作用。 我正在尝试根据第二个数据帧的值填充数据帧的所有 NaN 值。第一个 df 很大,第二个 df 将充当某种键。 DF1 Par
我有两个数据帧,df1 和 df2。每个数据帧的唯一标识符是“ID”和“Prop_Number”。我需要将 df1 中的 Num1、2 和 3 列复制到 df2、1_Num 中的相应列...但我不确定
我有以下数据框: 注意:日期是索引 city morning afternoon evening midnight date 2014-05-01 Y
我是一名优秀的程序员,十分优秀!