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

如何获取各sc_code的52周价格高低点对应的发生日期?

解决方案

首先注意:你提供的原始数据中价格字段是price,但现有代码里用的是close,需要统一字段名,否则会报错。以下是两种获取各sc_code价格高低值对应日期的方法:

方法一:分组直接聚合

通过groupby.agg同时计算价格的最小/最大值,以及对应的日期:

# 统一字段名:如果原数据价格列是price,替换代码中的close为price
df_temp = df_data.groupby(['sc_code'], sort=False).agg(
    closeL=('price', 'min'),          # 最低价格
    closeH=('price', 'max'),          # 最高价格
    date_closeL=('date', lambda x: x.iloc[x.reset_index()['price'].idxmin()]),  # 最低价对应日期
    date_closeH=('date', lambda x: x.iloc[x.reset_index()['price'].idxmax()])   # 最高价对应日期
).reset_index()

方法二:提取极值行后合并

先定位每个分组中价格取最小/最大值的行,再合并结果,逻辑更直观:

# 提取每个sc_code价格最低的行
min_rows = df_data.loc[df_data.groupby('sc_code')['price'].idxmin()]
# 提取每个sc_code价格最高的行
max_rows = df_data.loc[df_data.groupby('sc_code')['price'].idxmax()]

# 合并并整理列名
df_temp = min_rows.merge(
    max_rows,
    on='sc_code',
    suffixes=('_L', '_H')
)[['sc_code', 'date_L', 'price_L', 'date_H', 'price_H']]

# 可按需重命名列,匹配原代码的命名风格
df_temp = df_temp.rename(columns={
    'price_L': 'closeL',
    'price_H': 'closeH',
    'date_L': 'date_closeL',
    'date_H': 'date_closeH'
})

注意事项

  • 如果同一个sc_code存在多个相同的最低/最高价格,idxmin()/idxmax()只会返回第一个出现的日期。若需要所有对应日期,可改用布尔筛选:
    # 示例:获取所有最低价对应的日期(以逗号分隔)
    df_temp = df_data.groupby('sc_code').agg(
        closeL=('price', 'min'),
        date_closeL=('date', lambda x: ','.join(x[x == x.min()]))
    ).reset_index()
    

内容的提问来源于stack exchange,提问作者bobby.dreamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:27:24