繁体   English   中英

Pandas 根据条件获取最后 X 行的最小值/最大值

[英]Pandas get min / max value of last X rows based on condition

我有一个市场数据表,其中每一行代表一个条形图。 一列是累积交易量,另一列是柱状图中的趋势。 我的目标是根据以下标准创建第三列来保存 Accumulated Volume 列的最小值/最大值:

对于连续的“向上”趋势柱,获取那些 X 个连续柱的最大累积交易量。

对于连续的“下降”趋势柱,获取那些 X 个连续柱的最小累积交易量。

这是一个包含原始两列和第三列的预期结果的示例。

预计 Output

我尝试将 group by 与 min / max 聚合一起使用,但没有得到预期的结果。

您需要创建一个新列来分组:

df['group'] = (df.Trend.shift(0) != df.Trend.shift(1)).cumsum()

结果:

Trend   group
Up      1
Up      1
Up      1
Up      1
Down    2
Down    2
Down    2
Down    2
Up      3
Up      3
Down    4
Up      5
Up      5

然后根据趋势值使用这些组值来最小/最大累积交易量:

group_values = df.groupby(group).apply(
    lambda tdf: tdf['Accumulated Volume'].max() if tdf['Trend'].unique()[0] == 'Up' else tdf['Accumulated Volume'].min())
df = df.merge(
    group_values.to_frame('min/max'),
    how='left',
    left_on='group',
    right_index=True
)
df.drop('group',axis=1, inplace=True)

最终结果等于您想要的 output:

Accumulated Volume  Trend   min/max
11                  Up      55
8                   Up      55
55                  Up      55
15                  Up      55
125                 Down    -140
-87                 Down    -140
-121                Down    -140
-140                Down    -140
-160                Up      86
86                  Up      86
8                   Down    8
119                 Up      119
-8                  Up      119

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM