You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas groupby下比较列值 筛选指定时间点价格利润差值均超历史的名称

实现方案

核心逻辑说明

  • 首先需要按Name维度单独分组计算时序差值,你之前按['Time','Price']分组的逻辑不符合需求,差值计算仅需要同主体内按时序相邻行做差即可
  • 计算差值前必须先按Name+Time排序,保证时间序列顺序正确
  • 筛选时注意历史差值仅统计目标时间点之前的记录,避免包含目标时间点自身的差值导致判断逻辑失效

完整可运行代码

import pandas as pd

# 1. 构造示例数据(实际使用时替换成自己的DataFrame即可)
data = [
    ['5:30', 'A', 10, 2],
    ['5:35', 'A', 12, 3],
    ['5:40', 'A', 13, 3.5],
    ['5:30', 'B', 8, 1],
    ['5:35', 'B', 9, 1.2],
    ['5:40', 'B', 15, 4]
]
df = pd.DataFrame(data, columns=['Time', 'Name', 'price', 'Profit'])

# 2. 时间格式处理+排序,保证时序正确
df['Time'] = pd.to_datetime(df['Time'], format='%H:%M').dt.time
df = df.sort_values(['Name', 'Time']).reset_index(drop=True)

# 3. 按Name分组计算差值,首个时间点填充0
df['diff_price'] = df.groupby('Name')['price'].diff().fillna(0)
df['diff_profit'] = df.groupby('Name')['Profit'].diff().fillna(0)

# 4. 定义目标时间,筛选符合条件的Name
target_time = pd.to_datetime('5:40', format='%H:%M').time()
# 统计每个主体目标时间前的历史最大差值
history_max = df[df['Time'] < target_time].groupby('Name').agg(
    max_diff_price=('diff_price', 'max'),
    max_diff_profit=('diff_profit', 'max')
).reset_index()
# 取目标时间的差值数据关联匹配
target_data = df[df['Time'] == target_time][['Name', 'diff_price', 'diff_profit']]
result_df = pd.merge(target_data, history_max, on='Name')
# 筛选双差值均超过历史最大值的Name
result = result_df[
    (result_df['diff_price'] > result_df['max_diff_price']) &
    (result_df['diff_profit'] > result_df['max_diff_profit'])
]['Name'].tolist()

print(result) # 输出示例结果:['B']

内容的提问来源于stack exchange,提问作者Krishna Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:36:04