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

Pandas DataFrame中获取元素索引值及对应日期的问题

获取Pandas DataFrame中价格最值对应的日期

嘿,作为Pandas新手遇到这个问题太正常啦!其实不用复杂操作,Pandas本身就有很便捷的方法来搞定这个需求,我给你拆解几种实用的方式:

方法1:用idxmax()/idxmin()快速获取单个最值日期

如果你的价格列里最大/最小值只有一个(或者你只需要第一个出现的对应日期),这个方法最直接:

# 假设你的DataFrame名为df,列名是date和price
max_price_date = df.loc[df['price'].idxmax(), 'date']
min_price_date = df.loc[df['price'].idxmin(), 'date']

print(f"最高价对应的日期:{max_price_date}")
print(f"最低价对应的日期:{min_price_date}")

解释一下:df['price'].idxmax()会返回price列最大值所在行的索引,然后用loc根据这个索引和列名date,直接取出对应的日期值。

方法2:获取所有最值对应的日期

如果price列里有多个相同的最大/最小值,想要把所有对应的日期都找出来,就用布尔索引:

# 获取所有最高价对应的日期
all_max_dates = df[df['price'] == df['price'].max()]['date']
# 转成列表更直观
all_max_dates_list = all_max_dates.tolist()

# 获取所有最低价对应的日期
all_min_dates = df[df['price'] == df['price'].min()]['date']
all_min_dates_list = all_min_dates.tolist()

print(f"所有最高价对应的日期:{all_max_dates_list}")
print(f"所有最低价对应的日期:{all_min_dates_list}")

这里df['price'] == df['price'].max()会生成一个布尔Series,标记哪些行的价格是最大值,用这个布尔Series筛选DataFrame后,再取date列就能得到所有符合条件的日期。

用numpy where的正确姿势

你之前尝试numpy的where没成功,可能是用法没对,试试这个:

import numpy as np

# 找出所有最大值所在的行索引
max_indices = np.where(df['price'] == df['price'].max())[0]
# 根据索引取出对应的日期
max_dates = df.iloc[max_indices]['date'].tolist()

print(f"用numpy where找到的最高价日期:{max_dates}")

np.where()返回的是一个包含索引数组的元组,所以要加[0]取出索引数组,再用iloc(按位置索引)来获取对应的行,最后取date列即可。

完整示例代码

我给你写了个可直接运行的示例,你可以替换成自己的数据测试:

import pandas as pd
import numpy as np

# 模拟从数据库提取的DataFrame
data = {
    'date': ['2023-05-01', '2023-05-02', '2023-05-03', '2023-05-04', '2023-05-05'],
    'price': [120, 150, 130, 150, 110]
}
df = pd.DataFrame(data)

# 方法1:单个最值日期
max_date_single = df.loc[df['price'].idxmax(), 'date']
min_date_single = df.loc[df['price'].idxmin(), 'date']
print(f"单个最高价日期:{max_date_single}")
print(f"单个最低价日期:{min_date_single}\n")

# 方法2:所有最值日期
all_max_dates = df[df['price'] == df['price'].max()]['date'].tolist()
all_min_dates = df[df['price'] == df['price'].min()]['date'].tolist()
print(f"所有最高价日期:{all_max_dates}")
print(f"所有最低价日期:{all_min_dates}\n")

# numpy where方法
max_indices = np.where(df['price'] == df['price'].max())[0]
max_dates_np = df.iloc[max_indices]['date'].tolist()
print(f"numpy where方法获取的最高价日期:{max_dates_np}")

内容的提问来源于stack exchange,提问作者Bit Magazin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:30