[英]Pandas get min / max value of last X rows based on condition
我有一个市场数据表,其中每一行代表一个条形图。 一列是累积交易量,另一列是柱状图中的趋势。 我的目标是根据以下标准创建第三列来保存 Accumulated Volume 列的最小值/最大值:
对于连续的“向上”趋势柱,获取那些 X 个连续柱的最大累积交易量。
对于连续的“下降”趋势柱,获取那些 X 个连续柱的最小累积交易量。
这是一个包含原始两列和第三列的预期结果的示例。
我尝试将 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.